Coverage Report

Created: 2018-09-25 14:53

/src/mozilla-central/dom/security/PolicyTokenizer.cpp
Line
Count
Source
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 "PolicyTokenizer.h"
8
9
static LogModule*
10
GetPolicyTokenizerLog()
11
3.72M
{
12
3.72M
  static LazyLogModule gPolicyTokenizerPRLog("PolicyTokenizer");
13
3.72M
  return gPolicyTokenizerPRLog;
14
3.72M
}
15
16
3.72M
#define POLICYTOKENIZERLOG(args) MOZ_LOG(GetPolicyTokenizerLog(), mozilla::LogLevel::Debug, args)
17
18
static const char16_t SEMICOL = ';';
19
20
PolicyTokenizer::PolicyTokenizer(const char16_t* aStart,
21
                                 const char16_t* aEnd)
22
  : mCurChar(aStart)
23
  , mEndChar(aEnd)
24
5.77k
{
25
5.77k
  POLICYTOKENIZERLOG(("PolicyTokenizer::PolicyTokenizer"));
26
5.77k
}
27
28
PolicyTokenizer::~PolicyTokenizer()
29
5.77k
{
30
5.77k
  POLICYTOKENIZERLOG(("PolicyTokenizer::~PolicyTokenizer"));
31
5.77k
}
32
33
void
34
PolicyTokenizer::generateNextToken()
35
3.70M
{
36
3.70M
  skipWhiteSpaceAndSemicolon();
37
44.5M
  while (!atEnd() &&
38
44.5M
         !nsContentUtils::IsHTMLWhitespace(*mCurChar) &&
39
44.5M
         *mCurChar != SEMICOL) {
40
40.8M
    mCurToken.Append(*mCurChar++);
41
40.8M
  }
42
3.70M
  POLICYTOKENIZERLOG(("PolicyTokenizer::generateNextToken: %s", NS_ConvertUTF16toUTF8(mCurToken).get()));
43
3.70M
}
44
45
void
46
PolicyTokenizer::generateTokens(policyTokens& outTokens)
47
5.77k
{
48
5.77k
  POLICYTOKENIZERLOG(("PolicyTokenizer::generateTokens"));
49
5.77k
50
5.77k
  // dirAndSrcs holds one set of [ name, src, src, src, ... ]
51
5.77k
  nsTArray <nsString> dirAndSrcs;
52
5.77k
53
3.71M
  while (!atEnd()) {
54
3.70M
    generateNextToken();
55
3.70M
    dirAndSrcs.AppendElement(mCurToken);
56
3.70M
    skipWhiteSpace();
57
3.70M
    if (atEnd() || accept(SEMICOL)) {
58
315k
      outTokens.AppendElement(dirAndSrcs);
59
315k
      dirAndSrcs.Clear();
60
315k
    }
61
3.70M
  }
62
5.77k
}
63
64
void
65
PolicyTokenizer::tokenizePolicy(const nsAString &aPolicyString,
66
                                policyTokens& outTokens)
67
5.77k
{
68
5.77k
  POLICYTOKENIZERLOG(("PolicyTokenizer::tokenizePolicy"));
69
5.77k
70
5.77k
  PolicyTokenizer tokenizer(aPolicyString.BeginReading(),
71
5.77k
                            aPolicyString.EndReading());
72
5.77k
73
5.77k
  tokenizer.generateTokens(outTokens);
74
5.77k
}