Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(402)

Unified Diff: Source/core/dom/CSSSelectorWatch.h

Issue 18371008: Add a WebDocument::watchCssSelectors(selectors) (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@pinned
Patch Set: Fix most comments; TODO benchmark and use Element::recalcStyle Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/core/dom/CSSSelectorWatch.h
diff --git a/Source/modules/donottrack/NavigatorDoNotTrack.h b/Source/core/dom/CSSSelectorWatch.h
similarity index 51%
copy from Source/modules/donottrack/NavigatorDoNotTrack.h
copy to Source/core/dom/CSSSelectorWatch.h
index 0c044e7cd8edef2f8860c374d59f077e1e963816..abaca558b4d40c5a4e5f96089dac5471a78ce5fb 100644
--- a/Source/modules/donottrack/NavigatorDoNotTrack.h
+++ b/Source/core/dom/CSSSelectorWatch.h
@@ -28,32 +28,61 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#ifndef NavigatorDoNotTrack_h
-#define NavigatorDoNotTrack_h
+#ifndef CSSSelectorWatch_h
+#define CSSSelectorWatch_h
-#include "core/page/DOMWindowProperty.h"
#include "core/platform/Supplementable.h"
+#include "core/platform/Timer.h"
+#include "wtf/HashSet.h"
+#include "wtf/RefPtr.h"
+#include "wtf/Vector.h"
+#include "wtf/WeakPtr.h"
#include "wtf/text/WTFString.h"
namespace WebCore {
-class Frame;
-class Navigator;
+class Document;
+class ScriptExecutionContext;
+class StyleRule;
+class StyleRareNonInheritedData;
-class NavigatorDoNotTrack : public Supplement<Navigator>, public DOMWindowProperty {
+class CSSSelectorWatch : public Supplement<ScriptExecutionContext> {
public:
- virtual ~NavigatorDoNotTrack();
- static NavigatorDoNotTrack* from(Navigator*);
+ virtual ~CSSSelectorWatch();
- static String doNotTrack(Navigator*);
+ static CSSSelectorWatch* from(Document*);
- String doNotTrack();
+ void watchCSSSelectors(const Vector<String>& selectors);
+ const Vector<RefPtr<StyleRule> >& watchedCallbackSelectors() const { return m_watchedCallbackSelectors; }
+
+ void addSelectorMatch(const String& selector, StyleRareNonInheritedData*);
+ void removeSelectorMatch(const String& selector);
+
+private:
+ // Runs FrameLoaderClient::selectorMatchChanged with the updated value of
+ // m_callbackSelectorChange.
+ void callbackSelectorChangeTimerFired(Timer<CSSSelectorWatch>*);
+
+ Document* const m_document;
+
+ Vector<RefPtr<StyleRule> > m_watchedCallbackSelectors;
+
+ // Maps a CSS selector string with a -webkit-callback property to the number
+ // of matching RenderStyle objects in this document.
+ HashMap<String, int> m_matchingCallbackSelectors;
+ // Selectors are relative to m_matchingCallbackSelectors's contents at
+ // the previous call to selectorMatchChanged.
+ HashSet<String> m_addedSelectors;
+ HashSet<String> m_removedSelectors;
+
+ Timer<CSSSelectorWatch> m_callbackSelectorChangeTimer;
+
+ WeakPtrFactory<CSSSelectorWatch> m_weakThisFactory;
private:
- explicit NavigatorDoNotTrack(Frame*);
- static const char* supplementName();
+ CSSSelectorWatch(Document*);
};
} // namespace WebCore
-#endif // NavigatorDoNotTrack_h
+#endif // CSSSelectorWatch_h

Powered by Google App Engine
This is Rietveld 408576698