Sat, 03 Jan 2015 20:18:00 +0100
Conditionally enable double key logic according to:
private browsing mode or privacy.thirdparty.isolate preference and
implement in GetCookieStringCommon and FindCookie where it counts...
With some reservations of how to convince FindCookie users to test
condition and pass a nullptr when disabling double key logic.
2 /*
3 * Copyright 2006 The Android Open Source Project
4 *
5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file.
7 */
10 #include "SkDisplayMovie.h"
11 #include "SkAnimateMaker.h"
12 #include "SkCanvas.h"
13 #include "SkPaint.h"
15 #if SK_USE_CONDENSED_INFO == 0
17 const SkMemberInfo SkDisplayMovie::fInfo[] = {
18 SK_MEMBER(src, String)
19 };
21 #endif
23 DEFINE_GET_MEMBER(SkDisplayMovie);
25 SkDisplayMovie::SkDisplayMovie() : fDecodedSuccessfully(false), fLoaded(false), fMovieBuilt(false) {
26 fMovie.fMaker->fInMovie = true;
27 }
29 SkDisplayMovie::~SkDisplayMovie() {
30 }
32 void SkDisplayMovie::buildMovie() {
33 if (fMovieBuilt)
34 return;
35 SkAnimateMaker* movieMaker = fMovie.fMaker;
36 SkAnimateMaker* parentMaker = movieMaker->fParentMaker;
37 if (src.size() == 0 || parentMaker == NULL)
38 return;
39 movieMaker->fPrefix.set(parentMaker->fPrefix);
40 fDecodedSuccessfully = fMovie.fMaker->decodeURI(src.c_str());
41 if (fDecodedSuccessfully == false) {
43 if (movieMaker->getErrorCode() != SkXMLParserError::kNoError || movieMaker->getNativeCode() != -1) {
44 movieMaker->setInnerError(parentMaker, src);
45 parentMaker->setErrorCode(SkDisplayXMLParserError::kInMovie);
46 } else {
47 parentMaker->setErrorNoun(src);
48 parentMaker->setErrorCode(SkDisplayXMLParserError::kMovieNameUnknownOrMissing);
49 }
50 }
51 fMovieBuilt = true;
52 }
54 SkDisplayable* SkDisplayMovie::deepCopy(SkAnimateMaker* maker) {
55 SkDisplayMovie* copy = (SkDisplayMovie*) INHERITED::deepCopy(maker);
56 copy->fMovie.fMaker->fParentMaker = fMovie.fMaker->fParentMaker;
57 copy->fMovie.fMaker->fHostEventSinkID = fMovie.fMaker->fHostEventSinkID;
58 copy->fMovieBuilt = false;
59 *fMovie.fMaker->fParentMaker->fMovies.append() = copy;
60 return copy;
61 }
63 void SkDisplayMovie::dirty() {
64 buildMovie();
65 }
67 bool SkDisplayMovie::doEvent(SkDisplayEvent::Kind kind, SkEventState* state) {
68 if (fLoaded == false)
69 return false;
70 fMovie.fMaker->fEnableTime = fMovie.fMaker->fParentMaker->fEnableTime;
71 return fMovie.fMaker->fEvents.doEvent(*fMovie.fMaker, kind, state);
72 }
74 bool SkDisplayMovie::draw(SkAnimateMaker& maker) {
75 if (fDecodedSuccessfully == false)
76 return false;
77 if (fLoaded == false)
78 enable(maker);
79 maker.fCanvas->save();
80 SkPaint local = SkPaint(*maker.fPaint);
81 bool result = fMovie.draw(maker.fCanvas, &local,
82 maker.fDisplayList.getTime()) != SkAnimator::kNotDifferent;
83 maker.fDisplayList.fInvalBounds.join(fMovie.fMaker->fDisplayList.fInvalBounds);
84 maker.fCanvas->restore();
85 return result;
86 }
88 #ifdef SK_DUMP_ENABLED
89 void SkDisplayMovie::dump(SkAnimateMaker* maker) {
90 dumpBase(maker);
91 SkDebugf("src=\"%s\"/>\n", src.c_str());
92 SkAnimateMaker* movieMaker = fMovie.fMaker;
93 SkDisplayList::fIndent += 4;
94 movieMaker->fDisplayList.dumpInner(movieMaker);
95 SkDisplayList::fIndent -= 4;
96 dumpEnd(maker);
97 }
99 void SkDisplayMovie::dumpEvents() {
100 fMovie.fMaker->fEvents.dump(*fMovie.fMaker);
101 }
102 #endif
104 bool SkDisplayMovie::enable(SkAnimateMaker&) {
105 if (fDecodedSuccessfully == false)
106 return false;
107 SkAnimateMaker* movieMaker = fMovie.fMaker;
108 movieMaker->fEvents.doEvent(*movieMaker, SkDisplayEvent::kOnload, NULL);
109 movieMaker->fEvents.removeEvent(SkDisplayEvent::kOnload, NULL);
110 fLoaded = true;
111 movieMaker->fLoaded = true;
112 return false;
113 }
115 bool SkDisplayMovie::hasEnable() const {
116 return true;
117 }
119 void SkDisplayMovie::onEndElement(SkAnimateMaker& maker) {
120 #if defined SK_DEBUG && defined SK_DEBUG_ANIMATION_TIMING
121 fMovie.fMaker->fDebugTimeBase = maker.fDebugTimeBase;
122 #endif
123 fMovie.fMaker->fPrefix.set(maker.fPrefix);
124 fMovie.fMaker->fHostEventSinkID = maker.fHostEventSinkID;
125 fMovie.fMaker->fParentMaker = &maker;
126 buildMovie();
127 *maker.fMovies.append() = this;
128 }