Line data Source code
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 "nsHtml5TreeOpExecutor.h"
7 :
8 10 : nsHtml5SpeculativeLoad::nsHtml5SpeculativeLoad()
9 : #ifdef DEBUG
10 10 : : mOpCode(eSpeculativeLoadUninitialized)
11 : #endif
12 : {
13 10 : MOZ_COUNT_CTOR(nsHtml5SpeculativeLoad);
14 10 : }
15 :
16 20 : nsHtml5SpeculativeLoad::~nsHtml5SpeculativeLoad()
17 : {
18 10 : MOZ_COUNT_DTOR(nsHtml5SpeculativeLoad);
19 10 : NS_ASSERTION(mOpCode != eSpeculativeLoadUninitialized,
20 : "Uninitialized speculative load.");
21 10 : }
22 :
23 : void
24 10 : nsHtml5SpeculativeLoad::Perform(nsHtml5TreeOpExecutor* aExecutor)
25 : {
26 10 : switch (mOpCode) {
27 : case eSpeculativeLoadBase:
28 0 : aExecutor->SetSpeculationBase(mUrl);
29 0 : break;
30 : case eSpeculativeLoadCSP:
31 0 : aExecutor->AddSpeculationCSP(mMetaCSP);
32 0 : break;
33 : case eSpeculativeLoadMetaReferrer:
34 0 : aExecutor->SetSpeculationReferrerPolicy(mReferrerPolicy);
35 0 : break;
36 : case eSpeculativeLoadImage:
37 0 : aExecutor->PreloadImage(mUrl, mCrossOrigin, mSrcset, mSizes, mReferrerPolicy);
38 0 : break;
39 : case eSpeculativeLoadOpenPicture:
40 0 : aExecutor->PreloadOpenPicture();
41 0 : break;
42 : case eSpeculativeLoadEndPicture:
43 0 : aExecutor->PreloadEndPicture();
44 0 : break;
45 : case eSpeculativeLoadPictureSource:
46 0 : aExecutor->PreloadPictureSource(mSrcset, mSizes, mTypeOrCharsetSourceOrDocumentMode,
47 0 : mMedia);
48 0 : break;
49 : case eSpeculativeLoadScript:
50 0 : aExecutor->PreloadScript(mUrl, mCharset, mTypeOrCharsetSourceOrDocumentMode,
51 0 : mCrossOrigin, mIntegrity, false);
52 0 : break;
53 : case eSpeculativeLoadScriptFromHead:
54 4 : aExecutor->PreloadScript(mUrl, mCharset, mTypeOrCharsetSourceOrDocumentMode,
55 4 : mCrossOrigin, mIntegrity, true);
56 4 : break;
57 : case eSpeculativeLoadStyle:
58 0 : aExecutor->PreloadStyle(mUrl, mCharset, mCrossOrigin, mIntegrity);
59 0 : break;
60 : case eSpeculativeLoadManifest:
61 2 : aExecutor->ProcessOfflineManifest(mUrl);
62 2 : break;
63 : case eSpeculativeLoadSetDocumentCharset: {
64 4 : nsAutoCString narrowName;
65 2 : CopyUTF16toUTF8(mCharset, narrowName);
66 2 : NS_ASSERTION(mTypeOrCharsetSourceOrDocumentMode.Length() == 1,
67 : "Unexpected charset source string");
68 2 : int32_t intSource = (int32_t)mTypeOrCharsetSourceOrDocumentMode.First();
69 2 : aExecutor->SetDocumentCharsetAndSource(Encoding::ForName(narrowName),
70 2 : intSource);
71 : }
72 2 : break;
73 : case eSpeculativeLoadSetDocumentMode: {
74 2 : NS_ASSERTION(mTypeOrCharsetSourceOrDocumentMode.Length() == 1,
75 : "Unexpected document mode string");
76 : nsHtml5DocumentMode mode =
77 2 : (nsHtml5DocumentMode)mTypeOrCharsetSourceOrDocumentMode.First();
78 2 : aExecutor->SetDocumentMode(mode);
79 : }
80 2 : break;
81 : case eSpeculativeLoadPreconnect:
82 0 : aExecutor->Preconnect(mUrl, mCrossOrigin);
83 0 : break;
84 : default:
85 0 : NS_NOTREACHED("Bogus speculative load.");
86 0 : break;
87 : }
88 10 : }
|