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 }