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 #ifndef SkEventSink_DEFINED
11 #define SkEventSink_DEFINED
13 #include "SkRefCnt.h"
14 #include "SkEvent.h"
16 struct SkTagList;
18 /** \class SkEventSink
20 SkEventSink is the base class for all objects that receive SkEvents.
21 */
22 class SkEventSink : public SkRefCnt {
23 public:
24 SK_DECLARE_INST_COUNT(SkEventSink)
26 SkEventSink();
27 virtual ~SkEventSink();
29 /**
30 * Returns this eventsink's unique ID. Use this to post SkEvents to
31 * this eventsink.
32 */
33 SkEventSinkID getSinkID() const { return fID; }
35 /**
36 * Call this to pass an event to this object for processing. Returns true if the
37 * event was handled.
38 */
39 bool doEvent(const SkEvent&);
41 /** Returns true if the sink (or one of its subclasses) understands the event as a query.
42 If so, the sink may modify the event to communicate its "answer".
43 */
44 bool doQuery(SkEvent* query);
46 /**
47 * Add sinkID to the list of listeners, to receive events from calls to sendToListeners()
48 * and postToListeners(). If sinkID already exists in the listener list, no change is made.
49 */
50 void addListenerID(SkEventSinkID sinkID);
52 /**
53 * Copy listeners from one event sink to another, typically from parent to child.
54 * @param from the event sink to copy the listeners from
55 */
56 void copyListeners(const SkEventSink& from);
58 /**
59 * Remove sinkID from the list of listeners. If sinkID does not appear in the list,
60 * no change is made.
61 */
62 void removeListenerID(SkEventSinkID);
64 /**
65 * Returns true if there are 1 or more listeners attached to this eventsink
66 */
67 bool hasListeners() const;
69 /**
70 * Posts a copy of evt to each of the eventsinks in the lisener list.
71 * This ignores the targetID and target proc in evt.
72 */
73 void postToListeners(const SkEvent& evt, SkMSec delay = 0);
75 enum EventResult {
76 kHandled_EventResult, //!< the eventsink returned true from its doEvent method
77 kNotHandled_EventResult, //!< the eventsink returned false from its doEvent method
78 kSinkNotFound_EventResult //!< no matching eventsink was found for the event's getSink().
79 };
81 /**
82 * DoEvent handles dispatching the event to its target ID or proc.
83 */
84 static EventResult DoEvent(const SkEvent&);
86 /**
87 * Returns the matching eventsink, or null if not found
88 */
89 static SkEventSink* FindSink(SkEventSinkID);
91 protected:
92 /** Override this to handle events in your subclass. Be sure to call the inherited version
93 for events that you don't handle.
94 */
95 virtual bool onEvent(const SkEvent&);
96 virtual bool onQuery(SkEvent*);
98 SkTagList* findTagList(U8CPU tag) const;
99 void addTagList(SkTagList*);
100 void removeTagList(U8CPU tag);
102 private:
103 SkEventSinkID fID;
104 SkTagList* fTagHead;
106 // for our private link-list
107 SkEventSink* fNextSink;
109 typedef SkRefCnt INHERITED;
110 };
112 #endif