tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

TestIntegrityPolicy.cpp (3615B)


      1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
      2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
      3 /* This Source Code Form is subject to the terms of the Mozilla Public
      4 * License, v. 2.0. If a copy of the MPL was not distributed with this
      5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      6 
      7 #include "gtest/gtest.h"
      8 #include "mozilla/Preferences.h"
      9 #include "mozilla/dom/IntegrityPolicy.h"
     10 #include "nsCOMPtr.h"
     11 #include "nsLiteralString.h"
     12 #include "nsSerializationHelper.h"
     13 
     14 using namespace mozilla;
     15 using namespace mozilla::dom;
     16 
     17 void AssertSerializationForHeadersForIntegrityPolicy(
     18    const nsCString& aEnforcementHeader, const nsCString& aReportOnlyHeader,
     19    const nsCString& aSerializedString) {
     20  // Test policy serialization
     21  RefPtr<IntegrityPolicy> policy;
     22  IntegrityPolicy::ParseHeaders(aEnforcementHeader, aReportOnlyHeader,
     23                                getter_AddRefs(policy));
     24  ASSERT_TRUE(policy);
     25 
     26  nsCOMPtr<nsISerializable> serializable =
     27      static_cast<nsISerializable*>(policy.get());
     28 
     29  nsCString str;
     30  nsresult rv = NS_SerializeToString(serializable, str);
     31  ASSERT_TRUE(NS_SUCCEEDED(rv));
     32 
     33  ASSERT_STREQ(str.get(), aSerializedString.get());
     34 
     35  // Test policy deserialization
     36  nsCOMPtr<nsISupports> deserialized;
     37  rv = NS_DeserializeObject(aSerializedString, getter_AddRefs(deserialized));
     38  ASSERT_TRUE(NS_SUCCEEDED(rv));
     39  ASSERT_TRUE(deserialized);
     40 
     41  nsCOMPtr<nsIIntegrityPolicy> deserializedPolicy =
     42      do_QueryInterface(deserialized);
     43  ASSERT_TRUE(deserializedPolicy);
     44 
     45  RefPtr<IntegrityPolicy> deserializedIntegrityPolicy =
     46      IntegrityPolicy::Cast(deserializedPolicy);
     47 
     48  ASSERT_TRUE(IntegrityPolicy::Equals(policy, deserializedIntegrityPolicy));
     49 }
     50 
     51 TEST(IntegrityPolicy, Serialization)
     52 {
     53  // Test serialization for an empty policy
     54  AssertSerializationForHeadersForIntegrityPolicy(
     55      ""_ns, ""_ns, "SBL/Mhv/QjuX/EClaW2tIgAAAAAAAAAAwAAAAAAAAEYAAAABAAA="_ns);
     56 
     57  // Test serialization for a policy with a enforced blocked destination
     58  AssertSerializationForHeadersForIntegrityPolicy(
     59      "blocked-destinations=(script)"_ns, ""_ns,
     60      "SBL/Mhv/QjuX/EClaW2tIgAAAAAAAAAAwAAAAAAAAEYAAAABAQAAAAEAAAABAAAAAAA="_ns);
     61 
     62  // Test serialization for a policy with a report-only blocked destination
     63  AssertSerializationForHeadersForIntegrityPolicy(
     64      ""_ns, "blocked-destinations=(script)"_ns,
     65      "SBL/Mhv/QjuX/EClaW2tIgAAAAAAAAAAwAAAAAAAAEYAAAABAAEAAAABAAAAAQAAAAA="_ns);
     66 
     67  // Test serialization for a policy with endpoints in enforcement header
     68  AssertSerializationForHeadersForIntegrityPolicy(
     69      "blocked-destinations=(script), endpoints=(endpoint1 endpoint2)"_ns,
     70      ""_ns,
     71      "SBL/Mhv/QjuX/EClaW2tIgAAAAAAAAAAwAAAAAAAAEYAAAABAQAAAAEAAAABAAAAAgAAAAllbmRwb2ludDEAAAAJZW5kcG9pbnQyAA=="_ns);
     72 
     73  // Test serialization for a policy with endpoints in enforcement header
     74  AssertSerializationForHeadersForIntegrityPolicy(
     75      ""_ns,
     76      "blocked-destinations=(script), endpoints=(endpoint1 endpoint2)"_ns,
     77      "SBL/Mhv/QjuX/EClaW2tIgAAAAAAAAAAwAAAAAAAAEYAAAABAAEAAAABAAAAAQAAAAIAAAAJZW5kcG9pbnQxAAAACWVuZHBvaW50Mg=="_ns);
     78 
     79  // Test serialization for a policy with both enforced and report-only blocked
     80  // destinations and endpoints
     81  AssertSerializationForHeadersForIntegrityPolicy(
     82      "blocked-destinations=(script), endpoints=(endpoint1 endpoint2)"_ns,
     83      "blocked-destinations=(script), endpoints=(endpoint1 endpoint2)"_ns,
     84      "SBL/Mhv/QjuX/EClaW2tIgAAAAAAAAAAwAAAAAAAAEYAAAABAQAAAAEAAAABAAAAAgAAAAllbmRwb2ludDEAAAAJZW5kcG9pbnQyAQAAAAEAAAABAAAAAgAAAAllbmRwb2ludDEAAAAJZW5kcG9pbnQy"_ns);
     85 }