tor-browser

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

TestIDNA.cpp (5456B)


      1 #include "gtest/gtest.h"
      2 #include "gtest/MozGTestBench.h"  // For MOZ_GTEST_BENCH
      3 #include "gtest/BlackBox.h"
      4 
      5 #include "nsNetUtil.h"
      6 #include "nsIURI.h"
      7 #include "nsCOMPtr.h"
      8 #include "mozilla/Encoding.h"
      9 
     10 #define TEST_COUNT 10000
     11 
     12 class TestIDNA : public ::testing::Test {
     13 protected:
     14  void SetUp() override {
     15    // Intentionally Assign and not AssignLiteral
     16    // to simulate the heap case.
     17    mPlainASCII.Assign("example.com");
     18    mLeadingDigitASCII.Assign("1test.example");
     19    mUnicodeMixed.Assign("مثال.example");
     20    mPunycodeMixed.Assign("xn--mgbh0fb.example");
     21    mUnicodeLTR.Assign("නම.උදාහරණ");
     22    mPunycodeLTR.Assign("xn--r0co.xn--ozc8dl2c3bxd");
     23    mUnicodeRTL.Assign("الاسم.مثال");
     24    mPunycodeRTL.Assign("xn--mgba0b1dh.xn--mgbh0fb");
     25    // Intentionally not assigning to mEmpty
     26 
     27    // For measuring the case inside nsStandardURL
     28    mUrlPlainASCII.Assign("https://example.com/");
     29    mUrlLeadingDigitASCII.Assign("https://1test.example/");
     30    mUrlUnicodeMixed.Assign("https://مثال.example/");
     31    mUrlPunycodeMixed.Assign("https://xn--mgbh0fb.example/");
     32    mUrlUnicodeLTR.Assign("https://නම.උදාහරණ/");
     33    mUrlPunycodeLTR.Assign("https://xn--r0co.xn--ozc8dl2c3bxd/");
     34    mUrlUnicodeRTL.Assign("https://الاسم.مثال/");
     35    mUrlPunycodeRTL.Assign("https://xn--mgba0b1dh.xn--mgbh0fb/");
     36  }
     37 
     38 public:
     39  nsCString mPlainASCII;
     40  nsCString mLeadingDigitASCII;
     41  nsCString mUnicodeMixed;
     42  nsCString mPunycodeMixed;
     43  nsCString mUnicodeLTR;
     44  nsCString mPunycodeLTR;
     45  nsCString mUnicodeRTL;
     46  nsCString mPunycodeRTL;
     47  nsCString mEmpty;  // Extremely suspicious measurement!
     48  nsCString mUrlPlainASCII;
     49  nsCString mUrlLeadingDigitASCII;
     50  nsCString mUrlUnicodeMixed;
     51  nsCString mUrlPunycodeMixed;
     52  nsCString mUrlUnicodeLTR;
     53  nsCString mUrlPunycodeLTR;
     54  nsCString mUrlUnicodeRTL;
     55  nsCString mUrlPunycodeRTL;
     56 };
     57 
     58 #define IDNA_ITERATIONS 50000
     59 
     60 #define IDNA_BENCH(name, func, src)                             \
     61  MOZ_GTEST_BENCH_F(TestIDNA, name, [this] {                    \
     62    for (int i = 0; i < IDNA_ITERATIONS; i++) {                 \
     63      nsCString dst;                                            \
     64      func(*mozilla::BlackBox(&src), *mozilla::BlackBox(&dst)); \
     65    }                                                           \
     66  });
     67 
     68 #define IDNA_URL_BENCH(name, src)                                            \
     69  MOZ_GTEST_BENCH_F(TestIDNA, name, [this] {                                 \
     70    for (int i = 0; i < IDNA_ITERATIONS; i++) {                              \
     71      nsCOMPtr<nsIURI> dst;                                                  \
     72      nsresult rv = NS_NewURI(getter_AddRefs(dst), *mozilla::BlackBox(&src), \
     73                              UTF_8_ENCODING);                               \
     74      ASSERT_EQ(NS_OK, rv);                                                  \
     75      mozilla::BlackBox(&dst);                                               \
     76    }                                                                        \
     77  });
     78 
     79 IDNA_BENCH(BenchToASCIIPlainASCII, NS_DomainToASCII, mPlainASCII);
     80 IDNA_BENCH(BenchToASCIILeadingDigitASCII, NS_DomainToASCII, mLeadingDigitASCII);
     81 IDNA_BENCH(BenchToASCIIUnicodeMixed, NS_DomainToASCII, mUnicodeMixed);
     82 IDNA_BENCH(BenchToASCIIPunycodeMixed, NS_DomainToASCII, mPunycodeMixed);
     83 IDNA_BENCH(BenchToASCIIUnicodeLTR, NS_DomainToASCII, mUnicodeLTR);
     84 IDNA_BENCH(BenchToASCIIPunycodeLTR, NS_DomainToASCII, mPunycodeLTR);
     85 IDNA_BENCH(BenchToASCIIUnicodeRTL, NS_DomainToASCII, mUnicodeRTL);
     86 IDNA_BENCH(BenchToASCIIPunycodeRTL, NS_DomainToASCII, mPunycodeRTL);
     87 IDNA_BENCH(BenchToASCIIEmpty, NS_DomainToASCII, mEmpty);
     88 
     89 IDNA_BENCH(BenchToDisplayPlainASCII, NS_DomainToDisplay, mPlainASCII);
     90 IDNA_BENCH(BenchToDisplayLeadingDigitASCII, NS_DomainToDisplay,
     91           mLeadingDigitASCII);
     92 IDNA_BENCH(BenchToDisplayUnicodeMixed, NS_DomainToDisplay, mUnicodeMixed);
     93 IDNA_BENCH(BenchToDisplayPunycodeMixed, NS_DomainToDisplay, mPunycodeMixed);
     94 IDNA_BENCH(BenchToDisplayUnicodeLTR, NS_DomainToDisplay, mUnicodeLTR);
     95 IDNA_BENCH(BenchToDisplayPunycodeLTR, NS_DomainToDisplay, mPunycodeLTR);
     96 IDNA_BENCH(BenchToDisplayUnicodeRTL, NS_DomainToDisplay, mUnicodeRTL);
     97 IDNA_BENCH(BenchToDisplayPunycodeRTL, NS_DomainToDisplay, mPunycodeRTL);
     98 IDNA_BENCH(BenchToDisplayEmpty, NS_DomainToDisplay, mEmpty);
     99 
    100 IDNA_BENCH(BenchToUnicodePlainASCII, NS_DomainToUnicode, mPlainASCII);
    101 IDNA_BENCH(BenchToUnicodeLeadingDigitASCII, NS_DomainToUnicode,
    102           mLeadingDigitASCII);
    103 IDNA_BENCH(BenchToUnicodeUnicodeMixed, NS_DomainToUnicode, mUnicodeMixed);
    104 IDNA_BENCH(BenchToUnicodePunycodeMixed, NS_DomainToUnicode, mPunycodeMixed);
    105 IDNA_BENCH(BenchToUnicodeUnicodeLTR, NS_DomainToUnicode, mUnicodeLTR);
    106 IDNA_BENCH(BenchToUnicodePunycodeLTR, NS_DomainToUnicode, mPunycodeLTR);
    107 IDNA_BENCH(BenchToUnicodeUnicodeRTL, NS_DomainToUnicode, mUnicodeRTL);
    108 IDNA_BENCH(BenchToUnicodePunycodeRTL, NS_DomainToUnicode, mPunycodeRTL);
    109 IDNA_BENCH(BenchToUnicodeEmpty, NS_DomainToUnicode, mEmpty);
    110 
    111 IDNA_URL_BENCH(BenchUrlPlainASCII, mUrlPlainASCII);
    112 IDNA_URL_BENCH(BenchUrlLeadingDigitASCII, mUrlLeadingDigitASCII);
    113 IDNA_URL_BENCH(BenchUrlUnicodeMixed, mUrlUnicodeMixed);
    114 IDNA_URL_BENCH(BenchUrlPunycodeMixed, mUrlPunycodeMixed);
    115 IDNA_URL_BENCH(BenchUrlUnicodeLTR, mUrlUnicodeLTR);
    116 IDNA_URL_BENCH(BenchUrlPunycodeLTR, mUrlPunycodeLTR);
    117 IDNA_URL_BENCH(BenchUrlUnicodeRTL, mUrlUnicodeRTL);
    118 IDNA_URL_BENCH(BenchUrlPunycodeRTL, mUrlPunycodeRTL);