tor-browser

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

TestBackgroundThreadPrincipal.cpp (3531B)


      1 /* This Source Code Form is subject to the terms of the Mozilla Public
      2 * License, v. 2.0. If a copy of the MPL was not distributed with this
      3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      4 #include "gtest/gtest.h"
      5 #include "mozilla/gtest/MozAssertions.h"
      6 #include "mozilla/BasePrincipal.h"
      7 #include "mozilla/ContentPrincipal.h"
      8 #include "mozilla/NullPrincipal.h"
      9 #include "mozilla/ipc/BackgroundUtils.h"
     10 #include "mozilla/ipc/PBackgroundSharedTypes.h"
     11 #include "nsIEventTarget.h"
     12 #include "nsISerialEventTarget.h"
     13 #include "nsIURIMutator.h"
     14 #include "nsNetUtil.h"
     15 #include "nsPrintfCString.h"
     16 #include "nsThreadUtils.h"
     17 
     18 namespace mozilla {
     19 
     20 template <typename F>
     21 void RunOnBackgroundThread(F&& aFunction) {
     22  nsCOMPtr<nsISerialEventTarget> backgroundQueue;
     23  ASSERT_NS_SUCCEEDED(NS_CreateBackgroundTaskQueue(
     24      "RunOnBackgroundThread", getter_AddRefs(backgroundQueue)));
     25  ASSERT_NS_SUCCEEDED(NS_DispatchAndSpinEventLoopUntilComplete(
     26      "RunOnBackgroundThread"_ns, backgroundQueue,
     27      NS_NewRunnableFunction("RunOnBackgroundThread",
     28                             std::forward<F>(aFunction))));
     29 }
     30 
     31 TEST(BackgroundThreadPrincipal, CreateContent)
     32 {
     33  RunOnBackgroundThread([] {
     34    nsCOMPtr<nsIURI> contentURI;
     35    ASSERT_NS_SUCCEEDED(NS_NewURI(getter_AddRefs(contentURI),
     36                                  "http://subdomain.example.com:8000"_ns));
     37    RefPtr<BasePrincipal> contentPrincipal =
     38        BasePrincipal::CreateContentPrincipal(contentURI, OriginAttributes());
     39    EXPECT_TRUE(contentPrincipal->Is<ContentPrincipal>());
     40 
     41    nsCString origin;
     42    ASSERT_NS_SUCCEEDED(contentPrincipal->GetOrigin(origin));
     43    EXPECT_EQ(origin, "http://subdomain.example.com:8000"_ns);
     44 
     45    nsCString siteOrigin;
     46    ASSERT_NS_SUCCEEDED(contentPrincipal->GetSiteOrigin(siteOrigin));
     47    EXPECT_EQ(siteOrigin, "http://example.com"_ns);
     48  });
     49 }
     50 
     51 TEST(BackgroundThreadPrincipal, CreateNull)
     52 {
     53  RunOnBackgroundThread([] {
     54    nsCOMPtr<nsIURI> contentURI;
     55    ASSERT_NS_SUCCEEDED(NS_NewURI(getter_AddRefs(contentURI),
     56                                  "data:text/plain,hello world"_ns));
     57    RefPtr<BasePrincipal> principal =
     58        BasePrincipal::CreateContentPrincipal(contentURI, OriginAttributes());
     59    EXPECT_TRUE(principal->Is<NullPrincipal>());
     60 
     61    nsCString origin;
     62    ASSERT_NS_SUCCEEDED(principal->GetOrigin(origin));
     63    EXPECT_TRUE(StringBeginsWith(origin, "moz-nullprincipal:"_ns));
     64  });
     65 }
     66 
     67 TEST(BackgroundThreadPrincipal, PrincipalInfoConversions)
     68 {
     69  RunOnBackgroundThread([] {
     70    nsCOMPtr<nsIURI> contentURI;
     71    ASSERT_NS_SUCCEEDED(NS_NewURI(getter_AddRefs(contentURI),
     72                                  "http://subdomain.example.com:8000"_ns));
     73    RefPtr<BasePrincipal> contentPrincipal =
     74        BasePrincipal::CreateContentPrincipal(contentURI, OriginAttributes());
     75    EXPECT_TRUE(contentPrincipal->Is<ContentPrincipal>());
     76 
     77    ipc::PrincipalInfo info;
     78    ASSERT_NS_SUCCEEDED(ipc::PrincipalToPrincipalInfo(contentPrincipal, &info));
     79 
     80    EXPECT_TRUE(info.type() == ipc::PrincipalInfo::TContentPrincipalInfo);
     81    EXPECT_EQ(info.get_ContentPrincipalInfo().spec(),
     82              "http://subdomain.example.com:8000/"_ns);
     83    EXPECT_EQ(info.get_ContentPrincipalInfo().baseDomain(), "example.com"_ns);
     84 
     85    auto result = PrincipalInfoToPrincipal(info);
     86    ASSERT_TRUE(result.isOk());
     87    nsCOMPtr<nsIPrincipal> deserialized = result.unwrap();
     88    EXPECT_TRUE(deserialized->GetIsContentPrincipal());
     89 
     90    EXPECT_TRUE(deserialized->Equals(contentPrincipal));
     91  });
     92 }
     93 
     94 }  // namespace mozilla