Coverage Report

Created: 2018-09-25 14:53

/src/mozilla-central/parser/html/nsHtml5SpeculativeLoad.cpp
Line
Count
Source (jump to first uncovered line)
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
5
#include "nsHtml5SpeculativeLoad.h"
6
#include "mozilla/Encoding.h"
7
#include "nsHtml5TreeOpExecutor.h"
8
9
using namespace mozilla;
10
11
nsHtml5SpeculativeLoad::nsHtml5SpeculativeLoad()
12
  : mOpCode(eSpeculativeLoadUninitialized)
13
  , mIsAsync(false)
14
  , mIsDefer(false)
15
  , mEncoding(nullptr)
16
0
{
17
0
  MOZ_COUNT_CTOR(nsHtml5SpeculativeLoad);
18
0
  new (&mCharsetOrSrcset) nsString;
19
0
}
20
21
nsHtml5SpeculativeLoad::~nsHtml5SpeculativeLoad()
22
0
{
23
0
  MOZ_COUNT_DTOR(nsHtml5SpeculativeLoad);
24
0
  NS_ASSERTION(mOpCode != eSpeculativeLoadUninitialized,
25
0
               "Uninitialized speculative load.");
26
0
  if (mOpCode != eSpeculativeLoadSetDocumentCharset) {
27
0
    mCharsetOrSrcset.~nsString();
28
0
  }
29
0
}
30
31
void
32
nsHtml5SpeculativeLoad::Perform(nsHtml5TreeOpExecutor* aExecutor)
33
0
{
34
0
  switch (mOpCode) {
35
0
    case eSpeculativeLoadBase:
36
0
      aExecutor->SetSpeculationBase(mUrlOrSizes);
37
0
      break;
38
0
    case eSpeculativeLoadCSP:
39
0
      aExecutor->AddSpeculationCSP(
40
0
        mTypeOrCharsetSourceOrDocumentModeOrMetaCSPOrSizesOrIntegrity);
41
0
      break;
42
0
    case eSpeculativeLoadMetaReferrer:
43
0
      aExecutor->SetSpeculationReferrerPolicy(mReferrerPolicyOrIntegrity);
44
0
      break;
45
0
    case eSpeculativeLoadImage:
46
0
      aExecutor->PreloadImage(
47
0
        mUrlOrSizes,
48
0
        mCrossOriginOrMedia,
49
0
        mCharsetOrSrcset,
50
0
        mTypeOrCharsetSourceOrDocumentModeOrMetaCSPOrSizesOrIntegrity,
51
0
        mReferrerPolicyOrIntegrity);
52
0
      break;
53
0
    case eSpeculativeLoadOpenPicture:
54
0
      aExecutor->PreloadOpenPicture();
55
0
      break;
56
0
    case eSpeculativeLoadEndPicture:
57
0
      aExecutor->PreloadEndPicture();
58
0
      break;
59
0
    case eSpeculativeLoadPictureSource:
60
0
      aExecutor->PreloadPictureSource(
61
0
        mCharsetOrSrcset,
62
0
        mUrlOrSizes,
63
0
        mTypeOrCharsetSourceOrDocumentModeOrMetaCSPOrSizesOrIntegrity,
64
0
        mCrossOriginOrMedia);
65
0
      break;
66
0
    case eSpeculativeLoadScript:
67
0
      aExecutor->PreloadScript(
68
0
        mUrlOrSizes,
69
0
        mCharsetOrSrcset,
70
0
        mTypeOrCharsetSourceOrDocumentModeOrMetaCSPOrSizesOrIntegrity,
71
0
        mCrossOriginOrMedia,
72
0
        mReferrerPolicyOrIntegrity,
73
0
        false,
74
0
        mIsAsync,
75
0
        mIsDefer,
76
0
        false);
77
0
      break;
78
0
    case eSpeculativeLoadScriptFromHead:
79
0
      aExecutor->PreloadScript(
80
0
        mUrlOrSizes,
81
0
        mCharsetOrSrcset,
82
0
        mTypeOrCharsetSourceOrDocumentModeOrMetaCSPOrSizesOrIntegrity,
83
0
        mCrossOriginOrMedia,
84
0
        mReferrerPolicyOrIntegrity,
85
0
        true,
86
0
        mIsAsync,
87
0
        mIsDefer,
88
0
        false);
89
0
      break;
90
0
    case eSpeculativeLoadNoModuleScript:
91
0
      aExecutor->PreloadScript(
92
0
        mUrlOrSizes,
93
0
        mCharsetOrSrcset,
94
0
        mTypeOrCharsetSourceOrDocumentModeOrMetaCSPOrSizesOrIntegrity,
95
0
        mCrossOriginOrMedia,
96
0
        mReferrerPolicyOrIntegrity,
97
0
        false,
98
0
        mIsAsync,
99
0
        mIsDefer,
100
0
        true);
101
0
      break;
102
0
    case eSpeculativeLoadNoModuleScriptFromHead:
103
0
      aExecutor->PreloadScript(
104
0
        mUrlOrSizes,
105
0
        mCharsetOrSrcset,
106
0
        mTypeOrCharsetSourceOrDocumentModeOrMetaCSPOrSizesOrIntegrity,
107
0
        mCrossOriginOrMedia,
108
0
        mReferrerPolicyOrIntegrity,
109
0
        true,
110
0
        mIsAsync,
111
0
        mIsDefer,
112
0
        true);
113
0
      break;
114
0
    case eSpeculativeLoadStyle:
115
0
      aExecutor->PreloadStyle(
116
0
        mUrlOrSizes,
117
0
        mCharsetOrSrcset,
118
0
        mCrossOriginOrMedia,
119
0
        mReferrerPolicyOrIntegrity,
120
0
        mTypeOrCharsetSourceOrDocumentModeOrMetaCSPOrSizesOrIntegrity);
121
0
      break;
122
0
    case eSpeculativeLoadManifest:
123
0
      aExecutor->ProcessOfflineManifest(mUrlOrSizes);
124
0
      break;
125
0
    case eSpeculativeLoadSetDocumentCharset: {
126
0
      NS_ASSERTION(mTypeOrCharsetSourceOrDocumentModeOrMetaCSPOrSizesOrIntegrity
127
0
                       .Length() == 1,
128
0
                   "Unexpected charset source string");
129
0
      int32_t intSource =
130
0
        (int32_t)
131
0
          mTypeOrCharsetSourceOrDocumentModeOrMetaCSPOrSizesOrIntegrity.First();
132
0
      aExecutor->SetDocumentCharsetAndSource(WrapNotNull(mEncoding), intSource);
133
0
    } break;
134
0
    case eSpeculativeLoadSetDocumentMode: {
135
0
      NS_ASSERTION(mTypeOrCharsetSourceOrDocumentModeOrMetaCSPOrSizesOrIntegrity
136
0
                       .Length() == 1,
137
0
                   "Unexpected document mode string");
138
0
      nsHtml5DocumentMode mode =
139
0
        (nsHtml5DocumentMode)
140
0
          mTypeOrCharsetSourceOrDocumentModeOrMetaCSPOrSizesOrIntegrity.First();
141
0
      aExecutor->SetDocumentMode(mode);
142
0
    } break;
143
0
    case eSpeculativeLoadPreconnect:
144
0
      aExecutor->Preconnect(mUrlOrSizes, mCrossOriginOrMedia);
145
0
      break;
146
0
    default:
147
0
      MOZ_ASSERT_UNREACHABLE("Bogus speculative load.");
148
0
      break;
149
0
  }
150
0
}