tor-browser

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

TestPolicyContainer.cpp (4040B)


      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/NullPrincipal.h"
      9 #include "mozilla/Preferences.h"
     10 #include "mozilla/dom/IntegrityPolicy.h"
     11 #include "mozilla/dom/PolicyContainer.h"
     12 #include "mozilla/dom/nsCSPContext.h"
     13 #include "nsCOMPtr.h"
     14 #include "nsLiteralString.h"
     15 #include "nsNetUtil.h"
     16 #include "nsSerializationHelper.h"
     17 
     18 using namespace mozilla;
     19 using namespace mozilla::dom;
     20 
     21 void AssertSerializationForHeadersForPolicyContainer(
     22    const nsCString& aCSPHeader, const nsCString& aIntegrityPolicyHeader,
     23    const nsCString& aSerializedString) {
     24  // Test container serialization
     25  RefPtr<PolicyContainer> container = new PolicyContainer();
     26 
     27  if (!aIntegrityPolicyHeader.IsVoid()) {
     28    RefPtr<IntegrityPolicy> integrityPolicy;
     29    nsresult rv = IntegrityPolicy::ParseHeaders(
     30        aIntegrityPolicyHeader, ""_ns, getter_AddRefs(integrityPolicy));
     31    ASSERT_TRUE(NS_SUCCEEDED(rv));
     32    ASSERT_TRUE(integrityPolicy);
     33 
     34    container->SetIntegrityPolicy(integrityPolicy);
     35  }
     36 
     37  if (!aCSPHeader.IsVoid()) {
     38    RefPtr<nsCSPContext> csp = new nsCSPContext();
     39 
     40    nsCOMPtr<nsIPrincipal> principal = nsContentUtils::GetSystemPrincipal();
     41    nsCOMPtr<nsIURI> uri;
     42    NS_NewURI(getter_AddRefs(uri), "http://example.com"_ns);
     43    nsresult rv = csp->SetRequestContextWithPrincipal(principal, uri, ""_ns, 0);
     44    ASSERT_TRUE(NS_SUCCEEDED(rv));
     45 
     46    rv = csp->AppendPolicy(NS_ConvertUTF8toUTF16(aCSPHeader), false, true);
     47    ASSERT_TRUE(NS_SUCCEEDED(rv));
     48 
     49    container->SetCSP(csp);
     50  }
     51 
     52  nsCOMPtr<nsISerializable> serializable =
     53      static_cast<nsISerializable*>(container.get());
     54 
     55  nsCString str;
     56  nsresult rv = NS_SerializeToString(serializable, str);
     57  ASSERT_TRUE(NS_SUCCEEDED(rv));
     58 
     59  ASSERT_STREQ(str.get(), aSerializedString.get());
     60 
     61  // Test container deserialization
     62  nsCOMPtr<nsISupports> deserialized;
     63  rv = NS_DeserializeObject(aSerializedString, getter_AddRefs(deserialized));
     64  ASSERT_TRUE(NS_SUCCEEDED(rv));
     65  ASSERT_TRUE(deserialized);
     66 
     67  nsCOMPtr<nsIPolicyContainer> deserializedContainer =
     68      do_QueryInterface(deserialized);
     69  ASSERT_TRUE(deserializedContainer);
     70 
     71  RefPtr<PolicyContainer> deserializedPolicyContainer =
     72      PolicyContainer::Cast(deserializedContainer);
     73 
     74  ASSERT_TRUE(PolicyContainer::Equals(container, deserializedPolicyContainer));
     75 }
     76 
     77 TEST(PolicyContainer, Serialization)
     78 {
     79  // Test serialization with no headers
     80  AssertSerializationForHeadersForPolicyContainer(
     81      VoidCString(), VoidCString(),
     82      "ydqGXsPXSqGicQ9XHwE8MAAAAAAAAAAAwAAAAAAAAEYAAAABAAA="_ns);
     83 
     84  // Test serialization with empty headers
     85  AssertSerializationForHeadersForPolicyContainer(
     86      ""_ns, ""_ns,
     87      "ydqGXsPXSqGicQ9XHwE8MAAAAAAAAAAAwAAAAAAAAEYAAAABAQnZ7Rrl1EAEv+Anzrkj2awdYyAIbJdIrqUcFuLaoPT2Ad6UctCANBHTk5kAEEug/UCSBzpUbXhPMJE6uHGBMgjGAAAAAv////8AAABQAQAAABNodHRwOi8vZXhhbXBsZS5jb20vAAAAAAAAAAQAAAAHAAAACwAAAAf/////AAAAB/////8AAAAHAAAACwAAABIAAAABAAAAEgAAAAEAAAASAAAAAQAAABMAAAAAAAAAAP////8AAAAA/////wAAAAD/////AAAAAP////8BAAAAAAAAAAAACHsiMyI6e319AAAAAAFIEv8yG/9CO5f8QKVpba0iSBL/Mhv/QjuX/EClaW2tIgAAAAEAAA=="_ns);
     88 
     89  // Test serialization with all headers
     90  AssertSerializationForHeadersForPolicyContainer(
     91      "default-src 'self'"_ns, "blocked-destinations=(script)"_ns,
     92      "ydqGXsPXSqGicQ9XHwE8MAAAAAAAAAAAwAAAAAAAAEYAAAABAQnZ7Rrl1EAEv+Anzrkj2awdYyAIbJdIrqUcFuLaoPT2Ad6UctCANBHTk5kAEEug/UCSBzpUbXhPMJE6uHGBMgjGAAAAAv////8AAABQAQAAABNodHRwOi8vZXhhbXBsZS5jb20vAAAAAAAAAAQAAAAHAAAACwAAAAf/////AAAAB/////8AAAAHAAAACwAAABIAAAABAAAAEgAAAAEAAAASAAAAAQAAABMAAAAAAAAAAP////8AAAAA/////wAAAAD/////AAAAAP////8BAAAAAAAAAAAACHsiMyI6e319AAAAAQAAABIAZABlAGYAYQB1AGwAdAAtAHMAcgBjACAAJwBzAGUAbABmACcAAQABSBL/Mhv/QjuX/EClaW2tIkgS/zIb/0I7l/xApWltrSIAAAABAQAAAAEAAAABAAAAAAA="_ns);
     93 }