/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 | } |