15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*
25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *           (C) 1999 Antti Koivisto (koivisto@kde.org)
45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *           (C) 2001 Dirk Mueller (mueller@kde.org)
55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *           (C) 2006 Alexey Proskuryakov (ap@webkit.org)
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2012 Apple Inc. All rights reserved.
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmobile.com/)
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2011 Google Inc. All rights reserved.
105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * This library is free software; you can redistribute it and/or
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modify it under the terms of the GNU Library General Public
135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * License as published by the Free Software Foundation; either
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * version 2 of the License, or (at your option) any later version.
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * This library is distributed in the hope that it will be useful,
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * but WITHOUT ANY WARRANTY; without even the implied warranty of
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Library General Public License for more details.
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * You should have received a copy of the GNU Library General Public License
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * along with this library; see the file COPYING.LIB.  If not, write to
235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Boston, MA 02110-1301, USA.
255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef Document_h
295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define Document_h
305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
31197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "bindings/core/v8/ExceptionStatePlaceholder.h"
32197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "bindings/core/v8/ScriptValue.h"
33d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)#include "core/animation/AnimationClock.h"
34a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch#include "core/animation/CompositorPendingAnimations.h"
3553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/ContainerNode.h"
3651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "core/dom/DocumentEncodingData.h"
37e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "core/dom/DocumentInit.h"
381e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "core/dom/DocumentLifecycle.h"
391e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "core/dom/DocumentSupplementable.h"
4053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/DocumentTiming.h"
411e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "core/dom/ExecutionContext.h"
4253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/MutationObserver.h"
43e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "core/dom/TextLinkColors.h"
4453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/TreeScope.h"
4553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/UserActionElementSet.h"
461e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "core/dom/ViewportDescription.h"
471e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "core/dom/custom/CustomElement.h"
4853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/CollectionType.h"
4909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "core/page/FocusType.h"
5053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/page/PageVisibilityState.h"
51aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch#include "platform/Length.h"
521e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/Timer.h"
53a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch#include "platform/heap/Handle.h"
5409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "platform/weborigin/KURL.h"
5551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "platform/weborigin/ReferrerPolicy.h"
56591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/HashSet.h"
57591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/OwnPtr.h"
58591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/PassOwnPtr.h"
59591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/PassRefPtr.h"
60591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/WeakPtr.h"
615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
62c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink {
635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
64197021e6b966cfb06891637935ef33fff06433d1Ben Murdochclass AnimationTimeline;
655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class AXObjectCache;
665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class Attr;
675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class CDATASection;
685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class CSSStyleDeclaration;
695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class CSSStyleSheet;
70d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)class CanvasRenderingContext2D;
71e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)class Chrome;
725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class Comment;
73e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)class ConsoleMessage;
745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class ContextFeatures;
75197021e6b966cfb06891637935ef33fff06433d1Ben Murdochclass CustomElementMicrotaskRunQueue;
76e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdochclass CustomElementRegistrationContext;
775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class DOMImplementation;
785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class DocumentFragment;
79521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)class DocumentLifecycleNotifier;
805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class DocumentLoader;
815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class DocumentMarkerController;
829e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)class DocumentNameCollection;
835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class DocumentParser;
8410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochclass DocumentState;
855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class DocumentType;
865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class Element;
8709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)class ElementDataCache;
885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class Event;
89f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)class EventFactoryBase;
905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class EventListener;
91197021e6b966cfb06891637935ef33fff06433d1Ben Murdochtemplate <typename EventType>
92197021e6b966cfb06891637935ef33fff06433d1Ben Murdochclass EventWithHitTestResults;
93df95704c49daea886ddad70775bda23618d6274dBen Murdochclass ExceptionState;
945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class FloatQuad;
95df95704c49daea886ddad70775bda23618d6274dBen Murdochclass FloatRect;
965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class FormController;
97f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)class Frame;
9809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)class FrameHost;
995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class FrameView;
100df95704c49daea886ddad70775bda23618d6274dBen Murdochclass HTMLAllCollection;
1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class HTMLCanvasElement;
1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class HTMLCollection;
103c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)class HTMLDialogElement;
1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class HTMLElement;
1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class HTMLFrameOwnerElement;
1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class HTMLHeadElement;
1076f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdochclass HTMLImportLoader;
1086f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdochclass HTMLImportsController;
109d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)class HTMLLinkElement;
110521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)class HTMLScriptElement;
1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class HitTestRequest;
1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class LayoutPoint;
113926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)class LiveNodeListBase;
1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class Locale;
115197021e6b966cfb06891637935ef33fff06433d1Ben Murdochclass LocalDOMWindow;
116f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)class LocalFrame;
1171e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)class Location;
11809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)class MainThreadTaskRunner;
119197021e6b966cfb06891637935ef33fff06433d1Ben Murdochclass MediaQueryListListener;
1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class MediaQueryMatcher;
1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class NodeFilter;
1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class NodeIterator;
1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class Page;
1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class PlatformMouseEvent;
1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class ProcessingInstruction;
126197021e6b966cfb06891637935ef33fff06433d1Ben Murdochclass QualifiedName;
1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class Range;
12853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)class RenderView;
12953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)class RequestAnimationFrameCallback;
130df95704c49daea886ddad70775bda23618d6274dBen Murdochclass ResourceFetcher;
13193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)class SVGDocumentExtensions;
13209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)class SVGUseElement;
1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class ScriptRunner;
13453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)class ScriptableDocumentParser;
13553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)class ScriptedAnimationController;
1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class SecurityOrigin;
13753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)class SegmentedString;
1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class SelectorQueryCache;
1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class SerializedScriptValue;
1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class Settings;
1411e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)class StyleEngine;
1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class StyleResolver;
1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class StyleSheet;
1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class StyleSheetList;
1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class Text;
14653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)class TextAutosizer;
14753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)class Touch;
14853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)class TouchList;
14953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)class TransformSource;
1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class TreeWalker;
151926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)class VisitedLinkState;
152d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)class WebGLRenderingContext;
1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)struct AnnotatedRegionValue;
155197021e6b966cfb06891637935ef33fff06433d1Ben Murdochstruct IconURL;
1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
157197021e6b966cfb06891637935ef33fff06433d1Ben Murdochtypedef EventWithHitTestResults<PlatformMouseEvent> MouseEventWithHitTestResults;
1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)typedef int ExceptionCode;
1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
160591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdochenum StyleResolverUpdateMode {
161591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    // Discards the StyleResolver and rebuilds it.
162591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    FullStyleUpdate,
163591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    // Attempts to use StyleInvalidationAnalysis to avoid discarding the entire StyleResolver.
164591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    AnalyzedStyleUpdate
165591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch};
1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)enum NodeListInvalidationType {
1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    DoNotInvalidateOnAttributeChanges = 0,
1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    InvalidateOnClassAttrChange,
1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    InvalidateOnIdNameAttrChange,
1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    InvalidateOnNameAttrChange,
1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    InvalidateOnForAttrChange,
1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    InvalidateForFormControls,
1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    InvalidateOnHRefAttrChange,
1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    InvalidateOnAnyAttrChange,
1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)};
1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)const int numNodeListInvalidationTypes = InvalidateOnAnyAttrChange + 1;
1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
17981a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)enum DocumentClass {
18081a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)    DefaultDocumentClass = 0,
18181a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)    HTMLDocumentClass = 1,
18281a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)    XHTMLDocumentClass = 1 << 1,
18381a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)    ImageDocumentClass = 1 << 2,
18481a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)    PluginDocumentClass = 1 << 3,
18581a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)    MediaDocumentClass = 1 << 4,
18681a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)    SVGDocumentClass = 1 << 5,
18709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    XMLDocumentClass = 1 << 6,
18881a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)};
18981a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)
19081a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)typedef unsigned char DocumentClassFlags;
19181a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)
19209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)class Document;
19309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
194f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liuclass DocumentVisibilityObserver : public WillBeGarbageCollectedMixin {
19509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)public:
19609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    DocumentVisibilityObserver(Document&);
19709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    virtual ~DocumentVisibilityObserver();
19809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
19909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    virtual void didChangeVisibilityState(PageVisibilityState) = 0;
20009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
20109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    // Classes that inherit Node and DocumentVisibilityObserver must have a
20209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    // virtual override of Node::didMoveToNewDocument that calls
20309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    // DocumentVisibilityObserver::setDocument
20409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    void setObservedDocument(Document&);
20509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
2065d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)protected:
207e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    virtual void trace(Visitor*);
2085d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)
20909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)private:
21009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    void registerObserver(Document&);
21109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    void unregisterObserver();
2125d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)
2135d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)    RawPtrWillBeMember<Document> m_document;
21409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)};
21509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
2167242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciclass Document : public ContainerNode, public TreeScope, public SecurityContext, public ExecutionContext
217f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)    , public DocumentSupplementable, public LifecycleContext<Document> {
2187242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    DEFINE_WRAPPERTYPEINFO();
219a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch    WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(Document);
2205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public:
221d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    static PassRefPtrWillBeRawPtr<Document> create(const DocumentInit& initializer = DocumentInit())
2225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2235d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)        return adoptRefWillBeNoop(new Document(initializer));
2245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    virtual ~Document();
2265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
227f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)    MediaQueryMatcher& mediaQueryMatcher();
2285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
22951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)    void mediaQueryAffectingValueChanged();
23051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)
2315d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)#if !ENABLE(OILPAN)
2325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    using ContainerNode::ref;
2335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    using ContainerNode::deref;
2345d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)#endif
235f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)    using SecurityContext::securityOrigin;
236f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)    using SecurityContext::contentSecurityPolicy;
237f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    using TreeScope::getElementById;
2385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
23909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    virtual bool canContainRangeEndPoint() const OVERRIDE { return true; }
2405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
241f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)    SelectorQueryCache& selectorQueryCache();
2425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
24309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    // Focus Management.
24409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    Element* activeElement() const;
24509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    bool hasFocus() const;
24609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
2475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // DOM methods & attributes for Document
2485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
249bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)    DEFINE_ATTRIBUTE_EVENT_LISTENER(beforecopy);
250bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)    DEFINE_ATTRIBUTE_EVENT_LISTENER(beforecut);
251bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)    DEFINE_ATTRIBUTE_EVENT_LISTENER(beforepaste);
252bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)    DEFINE_ATTRIBUTE_EVENT_LISTENER(copy);
253bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)    DEFINE_ATTRIBUTE_EVENT_LISTENER(cut);
2545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    DEFINE_ATTRIBUTE_EVENT_LISTENER(paste);
255323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    DEFINE_ATTRIBUTE_EVENT_LISTENER(pointerlockchange);
256323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    DEFINE_ATTRIBUTE_EVENT_LISTENER(pointerlockerror);
257bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)    DEFINE_ATTRIBUTE_EVENT_LISTENER(readystatechange);
2585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    DEFINE_ATTRIBUTE_EVENT_LISTENER(search);
259bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)    DEFINE_ATTRIBUTE_EVENT_LISTENER(securitypolicyviolation);
2605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    DEFINE_ATTRIBUTE_EVENT_LISTENER(selectionchange);
261bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)    DEFINE_ATTRIBUTE_EVENT_LISTENER(selectstart);
2625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    DEFINE_ATTRIBUTE_EVENT_LISTENER(touchcancel);
263bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)    DEFINE_ATTRIBUTE_EVENT_LISTENER(touchend);
264bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)    DEFINE_ATTRIBUTE_EVENT_LISTENER(touchmove);
265bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)    DEFINE_ATTRIBUTE_EVENT_LISTENER(touchstart);
266bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)    DEFINE_ATTRIBUTE_EVENT_LISTENER(wheel);
2675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
268bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)    bool shouldMergeWithLegacyDescription(ViewportDescription::Type);
269bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)    bool shouldOverrideLegacyDescription(ViewportDescription::Type);
2701e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    void setViewportDescription(const ViewportDescription&);
2711e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    const ViewportDescription& viewportDescription() const { return m_viewportDescription; }
272aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    Length viewportDefaultMinWidth() const { return m_viewportDefaultMinWidth; }
273aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch
2741e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    bool hasLegacyViewportTag() const { return m_legacyViewportDescription.isLegacyViewportType(); }
2755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
27609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    void setReferrerPolicy(ReferrerPolicy);
2775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ReferrerPolicy referrerPolicy() const { return m_referrerPolicy; }
2785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
27909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    String outgoingReferrer();
28009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    String outgoingOrigin() const;
28109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
282d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    void setDoctype(PassRefPtrWillBeRawPtr<DocumentType>);
2835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    DocumentType* doctype() const { return m_docType.get(); }
2845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
285d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    DOMImplementation& implementation();
28602772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch
2875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    Element* documentElement() const
2885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
2895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return m_documentElement.get();
2905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
291926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
292d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    // Returns whether the Document has an AppCache manifest.
293d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    bool hasAppCacheManifest() const;
29481a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)
2951e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    Location* location() const;
2961e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)
297d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    PassRefPtrWillBeRawPtr<Element> createElement(const AtomicString& name, ExceptionState&);
298d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    PassRefPtrWillBeRawPtr<DocumentFragment> createDocumentFragment();
299d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    PassRefPtrWillBeRawPtr<Text> createTextNode(const String& data);
300d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    PassRefPtrWillBeRawPtr<Comment> createComment(const String& data);
301d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    PassRefPtrWillBeRawPtr<CDATASection> createCDATASection(const String& data, ExceptionState&);
302d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    PassRefPtrWillBeRawPtr<ProcessingInstruction> createProcessingInstruction(const String& target, const String& data, ExceptionState&);
303d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    PassRefPtrWillBeRawPtr<Attr> createAttribute(const AtomicString& name, ExceptionState&);
304d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    PassRefPtrWillBeRawPtr<Attr> createAttributeNS(const AtomicString& namespaceURI, const AtomicString& qualifiedName, ExceptionState&, bool shouldIgnoreNamespaceChecks = false);
305d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    PassRefPtrWillBeRawPtr<Node> importNode(Node* importedNode, bool deep, ExceptionState&);
306d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    PassRefPtrWillBeRawPtr<Element> createElementNS(const AtomicString& namespaceURI, const AtomicString& qualifiedName, ExceptionState&);
307d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    PassRefPtrWillBeRawPtr<Element> createElement(const QualifiedName&, bool createdByParser);
3085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool regionBasedColumnsEnabled() const;
3105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    Element* elementFromPoint(int x, int y) const;
312a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch    PassRefPtrWillBeRawPtr<Range> caretRangeFromPoint(int x, int y);
3135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    String readyState() const;
3155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    String defaultCharset() const;
3175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
318a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    AtomicString inputEncoding() const { return Document::encodingName(); }
319a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    AtomicString charset() const { return Document::encodingName(); }
320a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    AtomicString characterSet() const { return Document::encodingName(); }
3215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
322a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    AtomicString encodingName() const;
3235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setCharset(const String&);
3255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setContent(const String&);
3275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    String suggestedMIMEType() const;
329aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    void setMimeType(const AtomicString&);
330aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    AtomicString contentType() const; // DOM 4 document.contentType
3315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
332a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    const AtomicString& contentLanguage() const { return m_contentLanguage; }
333a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    void setContentLanguage(const AtomicString&);
3345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    String xmlEncoding() const { return m_xmlEncoding; }
3365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    String xmlVersion() const { return m_xmlVersion; }
3375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    enum StandaloneStatus { StandaloneUnspecified, Standalone, NotStandalone };
3385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool xmlStandalone() const { return m_xmlStandalone == Standalone; }
3395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    StandaloneStatus xmlStandaloneStatus() const { return static_cast<StandaloneStatus>(m_xmlStandalone); }
3405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool hasXMLDeclaration() const { return m_hasXMLDeclaration; }
3415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setXMLEncoding(const String& encoding) { m_xmlEncoding = encoding; } // read-only property, only to be set from XMLDocumentParser
343df95704c49daea886ddad70775bda23618d6274dBen Murdoch    void setXMLVersion(const String&, ExceptionState&);
344df95704c49daea886ddad70775bda23618d6274dBen Murdoch    void setXMLStandalone(bool, ExceptionState&);
3455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setHasXMLDeclaration(bool hasXMLDeclaration) { m_hasXMLDeclaration = hasXMLDeclaration ? 1 : 0; }
3465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
34709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    virtual KURL baseURI() const OVERRIDE FINAL;
3485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
34951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)    String visibilityState() const;
35051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)    bool hidden() const;
35109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    void didChangeVisibilityState();
3525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
353d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    PassRefPtrWillBeRawPtr<Node> adoptNode(PassRefPtrWillBeRawPtr<Node> source, ExceptionState&);
3545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
355d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    PassRefPtrWillBeRawPtr<HTMLCollection> images();
356d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    PassRefPtrWillBeRawPtr<HTMLCollection> embeds();
357d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    PassRefPtrWillBeRawPtr<HTMLCollection> applets();
358d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    PassRefPtrWillBeRawPtr<HTMLCollection> links();
359d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    PassRefPtrWillBeRawPtr<HTMLCollection> forms();
360d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    PassRefPtrWillBeRawPtr<HTMLCollection> anchors();
361d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    PassRefPtrWillBeRawPtr<HTMLCollection> scripts();
362d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    PassRefPtrWillBeRawPtr<HTMLAllCollection> allForBinding();
363d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    PassRefPtrWillBeRawPtr<HTMLAllCollection> all();
3645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
365d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    PassRefPtrWillBeRawPtr<HTMLCollection> windowNamedItems(const AtomicString& name);
3669e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    PassRefPtrWillBeRawPtr<DocumentNameCollection> documentNamedItems(const AtomicString& name);
3675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
36881a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)    bool isHTMLDocument() const { return m_documentClasses & HTMLDocumentClass; }
36981a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)    bool isXHTMLDocument() const { return m_documentClasses & XHTMLDocumentClass; }
37009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    bool isXMLDocument() const { return m_documentClasses & XMLDocumentClass; }
37181a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)    bool isImageDocument() const { return m_documentClasses & ImageDocumentClass; }
37281a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)    bool isSVGDocument() const { return m_documentClasses & SVGDocumentClass; }
37381a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)    bool isPluginDocument() const { return m_documentClasses & PluginDocumentClass; }
37481a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)    bool isMediaDocument() const { return m_documentClasses & MediaDocumentClass; }
37581a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)
3765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool hasSVGRootNode() const;
37781a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)
37881a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)    bool isFrameSet() const;
3795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool isSrcdocDocument() const { return m_isSrcdocDocument; }
3818abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)    bool isMobileDocument() const { return m_isMobileDocument; }
3825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
383d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    bool isTransitionDocument() const { return m_isTransitionDocument; }
384d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    void setIsTransitionDocument() { m_isTransitionDocument = true; }
385c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    void hideTransitionElements(const AtomicString& cssSelector);
386d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)
387197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    struct TransitionElementData {
388197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        String scope;
389197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        String selector;
390197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        String markup;
391197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    };
392197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    void getTransitionElementData(Vector<TransitionElementData>&);
393197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch
39451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)    StyleResolver* styleResolver() const;
395a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    StyleResolver& ensureStyleResolver() const;
3965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool isViewSource() const { return m_isViewSource; }
3985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setIsViewSource(bool);
3995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool sawElementsInKnownNamespaces() const { return m_sawElementsInKnownNamespaces; }
4015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
402a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch    bool isRenderingReady() const { return haveImportsLoaded() && haveStylesheetsLoaded(); }
403a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch    bool isScriptExecutionReady() const { return isRenderingReady(); }
4045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // This is a DOM function.
4065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    StyleSheetList* styleSheets();
4075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4089bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)    StyleEngine* styleEngine() { return m_styleEngine.get(); }
4095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool gotoAnchorNeededAfterStylesheetsLoad() { return m_gotoAnchorNeededAfterStylesheetsLoad; }
4115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setGotoAnchorNeededAfterStylesheetsLoad(bool b) { m_gotoAnchorNeededAfterStylesheetsLoad = b; }
4125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
413591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    // Called when one or more stylesheets in the document may have been added, removed, or changed.
414d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    void styleResolverChanged(StyleResolverUpdateMode = FullStyleUpdate);
415323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    void styleResolverMayHaveChanged();
4165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
417e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch    // FIXME: Switch all callers of styleResolverChanged to these or better ones and then make them
418e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch    // do something smarter.
419d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    void removedStyleSheet(StyleSheet*, StyleResolverUpdateMode = FullStyleUpdate);
420d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    void addedStyleSheet(StyleSheet*) { styleResolverChanged(); }
421d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    void modifiedStyleSheet(StyleSheet*, StyleResolverUpdateMode = FullStyleUpdate);
422d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    void changedSelectorWatch() { styleResolverChanged(); }
423e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch
42409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    void scheduleUseShadowTreeUpdate(SVGUseElement&);
42509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    void unscheduleUseShadowTreeUpdate(SVGUseElement&);
42609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
427f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)    // FIXME: SVG filters should change to store the filter on the RenderStyle
428f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)    // instead of the RenderObject so we can get rid of this hack.
429f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)    void scheduleSVGFilterLayerUpdateHack(Element&);
430f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)    void unscheduleSVGFilterLayerUpdateHack(Element&);
43107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch
4325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void evaluateMediaQueryList();
4335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
434d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    FormController& formController();
43510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch    DocumentState* formElementsState() const;
4365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setStateForNewFormElements(const Vector<String>&);
4375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
43806f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    FrameView* view() const; // can be null
439d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    LocalFrame* frame() const { return m_frame; } // can be null
44009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    FrameHost* frameHost() const; // can be null
44106f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    Page* page() const; // can be null
44206f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    Settings* settings() const; // can be null
44306f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)
44406f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)    float devicePixelRatio() const;
4455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
446a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch    PassRefPtrWillBeRawPtr<Range> createRange();
4475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
448d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    PassRefPtrWillBeRawPtr<NodeIterator> createNodeIterator(Node* root, unsigned whatToShow, PassRefPtrWillBeRawPtr<NodeFilter>, ExceptionState&);
449d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    PassRefPtrWillBeRawPtr<TreeWalker> createTreeWalker(Node* root, unsigned whatToShow, PassRefPtrWillBeRawPtr<NodeFilter>, ExceptionState&);
4505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Special support for editing
452d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    PassRefPtrWillBeRawPtr<Text> createEditingTextNode(const String&);
4535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
45409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    void setupFontBuilder(RenderStyle* documentStyle);
45509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
456197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    bool needsRenderTreeUpdate() const;
45707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch    void updateRenderTreeIfNeeded() { updateRenderTree(NoChange); }
45807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch    void updateRenderTreeForNodeIfNeeded(Node*);
4595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void updateLayout();
46051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)    enum RunPostLayoutTasks {
46151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)        RunPostLayoutTasksAsyhnchronously,
46251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)        RunPostLayoutTasksSynchronously,
46351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)    };
46451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)    void updateLayoutIgnorePendingStylesheets(RunPostLayoutTasks = RunPostLayoutTasksAsyhnchronously);
4655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    PassRefPtr<RenderStyle> styleForElementIgnoringPendingStylesheets(Element*);
4665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    PassRefPtr<RenderStyle> styleForPage(int pageIndex);
4675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
468f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)    void updateDistributionForNodeIfNeeded(Node*);
469f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)
4705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Returns true if page box (margin boxes and page borders) is visible.
4715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool isPageBoxVisible(int pageIndex);
4725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Returns the preferred page size and margins in pixels, assuming 96
4745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // pixels per inch. pageSize, marginTop, marginRight, marginBottom,
4755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // marginLeft must be initialized to the default values that are used if
4765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // auto is specified.
4775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void pageSizeAndMarginsInPixels(int pageIndex, IntSize& pageSize, int& marginTop, int& marginRight, int& marginBottom, int& marginLeft);
4785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4793464d02a173573db42f8ee6bb07bb74fabf4f5f2Ben Murdoch    ResourceFetcher* fetcher() { return m_fetcher.get(); }
4805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
481521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)    virtual void attach(const AttachContext& = AttachContext()) OVERRIDE;
482521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)    virtual void detach(const AttachContext& = AttachContext()) OVERRIDE;
4835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void prepareForDestruction();
4845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
485d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    // If you have a Document, use renderView() instead which is faster.
486d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    void renderer() const WTF_DELETED_FUNCTION;
487d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)
4881e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    RenderView* renderView() const { return m_renderView; }
4895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4907242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    Document& axObjectCacheOwner() const;
491926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    AXObjectCache* existingAXObjectCache() const;
4925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    AXObjectCache* axObjectCache() const;
493926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    void clearAXObjectCache();
494926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
4955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // to get visually ordered hebrew and arabic pages right
4965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool visuallyOrdered() const { return m_visuallyOrdered; }
49702772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch
4985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    DocumentLoader* loader() const;
4995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
50010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch    void open(Document* ownerDocument = 0, ExceptionState& = ASSERT_NO_EXCEPTION);
501d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    PassRefPtrWillBeRawPtr<DocumentParser> implicitOpen();
5025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // close() is the DOM API document.close()
50410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch    void close(ExceptionState& = ASSERT_NO_EXCEPTION);
5055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // In some situations (see the code), we ignore document.close().
5065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // explicitClose() bypass these checks and actually tries to close the
5075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // input stream.
5085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void explicitClose();
5095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // implicitClose() actually does the work of closing the input stream.
5105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void implicitClose();
5115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
512f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)    bool dispatchBeforeUnloadEvent(Chrome&, bool&);
513e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    void dispatchUnloadEvents();
514e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)
515e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    enum PageDismissalType {
516e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)        NoDismissal = 0,
517e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)        BeforeUnloadDismissal = 1,
518e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)        PageHideDismissal = 2,
519e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)        UnloadDismissal = 3
520e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    };
521e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    PageDismissalType pageDismissalEventBeingDispatched() const;
522e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)
5235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void cancelParsing();
5245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
52510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch    void write(const SegmentedString& text, Document* ownerDocument = 0, ExceptionState& = ASSERT_NO_EXCEPTION);
52610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch    void write(const String& text, Document* ownerDocument = 0, ExceptionState& = ASSERT_NO_EXCEPTION);
52710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch    void writeln(const String& text, Document* ownerDocument = 0, ExceptionState& = ASSERT_NO_EXCEPTION);
5285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool wellFormed() const { return m_wellFormed; }
5305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    const KURL& url() const { return m_url; }
5325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setURL(const KURL&);
5335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // To understand how these concepts relate to one another, please see the
5355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // comments surrounding their declaration.
5365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    const KURL& baseURL() const { return m_baseURL; }
5375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setBaseURLOverride(const KURL&);
5385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    const KURL& baseURLOverride() const { return m_baseURLOverride; }
5395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    const KURL& baseElementURL() const { return m_baseElementURL; }
54009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    const AtomicString& baseTarget() const { return m_baseTarget; }
5415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void processBaseElement();
5425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    KURL completeURL(const String&) const;
54409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    KURL completeURLWithOverride(const String&, const KURL& baseURLOverride) const;
5455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
54609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    virtual String userAgent(const KURL&) const OVERRIDE FINAL;
54709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    virtual void disableEval(const String& errorMessage) OVERRIDE FINAL;
5485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
549f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)    bool canNavigate(const Frame& targetFrame);
550d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    LocalFrame* findUnsafeParentScrollPropagationBoundary();
5515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
552d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    CSSStyleSheet& elementSheet();
55302772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch
554d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    virtual PassRefPtrWillBeRawPtr<DocumentParser> createParser();
5555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    DocumentParser* parser() const { return m_parser.get(); }
5565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ScriptableDocumentParser* scriptableDocumentParser() const;
55702772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch
5585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool printing() const { return m_printing; }
5595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setPrinting(bool p) { m_printing = p; }
5605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool paginatedForScreen() const { return m_paginatedForScreen; }
5625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setPaginatedForScreen(bool p) { m_paginatedForScreen = p; }
56302772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch
5645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool paginated() const { return printing() || paginatedForScreen(); }
5655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    enum CompatibilityMode { QuirksMode, LimitedQuirksMode, NoQuirksMode };
5675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setCompatibilityMode(CompatibilityMode m);
5695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    CompatibilityMode compatibilityMode() const { return m_compatibilityMode; }
5705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    String compatMode() const;
5725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool inQuirksMode() const { return m_compatibilityMode == QuirksMode; }
5745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool inLimitedQuirksMode() const { return m_compatibilityMode == LimitedQuirksMode; }
5755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool inNoQuirksMode() const { return m_compatibilityMode == NoQuirksMode; }
5765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    enum ReadyState {
5785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        Loading,
5795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        Interactive,
5805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        Complete
5815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    };
5825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setReadyState(ReadyState);
583f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)    bool isLoadCompleted();
584f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)
5855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setParsing(bool);
58609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    bool parsing() const { return m_isParsing; }
5875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
58807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch    bool shouldScheduleLayout() const;
5895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    int elapsedTime() const;
590e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch
591e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch    TextLinkColors& textLinkColors() { return m_textLinkColors; }
592f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)    VisitedLinkState& visitedLinkState() const { return *m_visitedLinkState; }
593926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
5945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    MouseEventWithHitTestResults prepareMouseEvent(const HitTestRequest&, const LayoutPoint&, const PlatformMouseEvent&);
5955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /* Newly proposed CSS3 mechanism for selecting alternate
5975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)       stylesheets using the DOM. May be subject to change as
5985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)       spec matures. - dwh
5995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    */
6005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    String preferredStylesheetSet() const;
6015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    String selectedStylesheetSet() const;
6025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setSelectedStylesheetSet(const String&);
6035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
604d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    bool setFocusedElement(PassRefPtrWillBeRawPtr<Element>, FocusType = FocusTypeNone);
6057757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch    Element* focusedElement() const { return m_focusedElement.get(); }
606926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    UserActionElementSet& userActionElements()  { return m_userActionElements; }
607926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    const UserActionElementSet& userActionElements() const { return m_userActionElements; }
608f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)    void setNeedsFocusedElementCheck();
60909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    void setAutofocusElement(Element*);
61009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    Element* autofocusElement() const { return m_autofocusElement.get(); }
611e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch
612d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    void setActiveHoverElement(PassRefPtrWillBeRawPtr<Element>);
61309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    Element* activeHoverElement() const { return m_activeHoverElement.get(); }
6145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6157757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch    void removeFocusedElementOfSubtree(Node*, bool amongChildrenOnly = false);
6165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void hoveredNodeDetached(Node*);
6175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void activeChainNodeDetached(Node*);
6185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
619e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch    void updateHoverActiveState(const HitTestRequest&, Element*, const PlatformMouseEvent* = 0);
6205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Updates for :target (CSS3 selector).
6225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setCSSTarget(Element*);
6235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    Element* cssTarget() const { return m_cssTarget; }
62483750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch
625a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch    void scheduleRenderTreeUpdateIfNeeded();
6265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool hasPendingForcedStyleRecalc() const;
6275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
628d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    void registerNodeList(const LiveNodeListBase*);
629d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    void unregisterNodeList(const LiveNodeListBase*);
630d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    void registerNodeListWithIdNameCache(const LiveNodeListBase*);
631d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    void unregisterNodeListWithIdNameCache(const LiveNodeListBase*);
6325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool shouldInvalidateNodeListCaches(const QualifiedName* attrName = 0) const;
6335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void invalidateNodeListCaches(const QualifiedName* attrName);
6345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void attachNodeIterator(NodeIterator*);
6365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void detachNodeIterator(NodeIterator*);
63709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    void moveNodeIteratorsToNewDocument(Node&, Document&);
6385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void attachRange(Range*);
6405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void detachRange(Range*);
6415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void updateRangesAfterChildrenChanged(ContainerNode*);
6435d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)    void updateRangesAfterNodeMovedToAnotherDocument(const Node&);
6445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // nodeChildrenWillBeRemoved is used when removing all node children at once.
645d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    void nodeChildrenWillBeRemoved(ContainerNode&);
6465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // nodeWillBeRemoved is only safe when removing one node at a time.
64719cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles)    void nodeWillBeRemoved(Node&);
64851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)    bool canReplaceChild(const Node& newChild, const Node& oldChild) const;
6495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6509bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)    void didInsertText(Node*, unsigned offset, unsigned length);
6519bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)    void didRemoveText(Node*, unsigned offset, unsigned length);
652d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    void didMergeTextNodes(Text& oldNode, unsigned offset);
653d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    void didSplitTextNode(Text& oldNode);
6545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
655d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    void clearDOMWindow() { m_domWindow = nullptr; }
65676c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    LocalDOMWindow* domWindow() const { return m_domWindow; }
6575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
65876c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    // Helper functions for forwarding LocalDOMWindow event related tasks to the LocalDOMWindow if it exists.
65909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    void setWindowAttributeEventListener(const AtomicString& eventType, PassRefPtr<EventListener>);
66009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    EventListener* getWindowAttributeEventListener(const AtomicString& eventType);
6615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6625d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)    static void registerEventFactory(PassOwnPtr<EventFactoryBase>);
663d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    static PassRefPtrWillBeRawPtr<Event> createEvent(const String& eventType, ExceptionState&);
6645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // keep track of what types of event listeners are registered, so we don't
6665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // dispatch events unnecessarily
6675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    enum ListenerType {
6685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        DOMSUBTREEMODIFIED_LISTENER          = 1,
6695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        DOMNODEINSERTED_LISTENER             = 1 << 1,
6705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        DOMNODEREMOVED_LISTENER              = 1 << 2,
6715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        DOMNODEREMOVEDFROMDOCUMENT_LISTENER  = 1 << 3,
6725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        DOMNODEINSERTEDINTODOCUMENT_LISTENER = 1 << 4,
6735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        DOMCHARACTERDATAMODIFIED_LISTENER    = 1 << 5,
6745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        OVERFLOWCHANGED_LISTENER             = 1 << 6,
6755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        ANIMATIONEND_LISTENER                = 1 << 7,
6765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        ANIMATIONSTART_LISTENER              = 1 << 8,
6775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        ANIMATIONITERATION_LISTENER          = 1 << 9,
6785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        TRANSITIONEND_LISTENER               = 1 << 10,
6795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        SCROLL_LISTENER                      = 1 << 12
68007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch        // 4 bits remaining
6815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    };
6825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool hasListenerType(ListenerType listenerType) const { return (m_listenerTypes & listenerType); }
6845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void addListenerTypeIfNeeded(const AtomicString& eventType);
6855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool hasMutationObserversOfType(MutationObserver::MutationType type) const
6875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
6885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return m_mutationObserverTypes & type;
6895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
6905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool hasMutationObservers() const { return m_mutationObserverTypes; }
6915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void addMutationObserverTypes(MutationObserverOptions types) { m_mutationObserverTypes |= types; }
6925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    CSSStyleDeclaration* getOverrideStyle(Element*, const String& pseudoElt);
6945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
6955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    /**
6965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * Handles a HTTP header equivalent set by a meta tag using <meta http-equiv="..." content="...">. This is called
6975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * when a meta tag is encountered during document parsing, and also when a script dynamically changes or adds a meta
6985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * tag. This enables scripts to use meta tags to perform refreshes and set expiry dates in addition to them being
6995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * specified in a HTML file.
7005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     *
7015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param equiv The http header name (value of the meta tag's "equiv" attribute)
7025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     * @param content The header value (value of the meta tag's "content" attribute)
70309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)     * @param inDocumentHeadElement Is the element in the document's <head> element?
7045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)     */
70509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    void processHttpEquiv(const AtomicString& equiv, const AtomicString& content, bool inDocumentHeadElement);
7061e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    void updateViewportDescription();
7075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void processReferrerPolicy(const String& policy);
7085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Returns the owning element in the parent document.
7105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Returns 0 if this is the top level document.
7115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    HTMLFrameOwnerElement* ownerElement() const;
7125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7137242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    // Returns true if this document belongs to a frame that the parent document
7147242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    // made invisible (for instance by setting as style display:none).
7157242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    bool isInInvisibleSubframe() const;
7167242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
717c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    String title() const { return m_title; }
7185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setTitle(const String&);
7195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
72083750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch    Element* titleElement() const { return m_titleElement.get(); }
721c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    void setTitleElement(Element*);
7225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void removeTitle(Element* titleElement);
7235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7246f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch    const AtomicString& dir();
7256f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch    void setDir(const AtomicString&);
7266f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch
727df95704c49daea886ddad70775bda23618d6274dBen Murdoch    String cookie(ExceptionState&) const;
728df95704c49daea886ddad70775bda23618d6274dBen Murdoch    void setCookie(const String&, ExceptionState&);
7295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
730a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    const AtomicString& referrer() const;
7315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    String domain() const;
733df95704c49daea886ddad70775bda23618d6274dBen Murdoch    void setDomain(const String& newDomain, ExceptionState&);
7345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    String lastModified() const;
7365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // The cookieURL is used to query the cookie database for this document's
7385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // cookies. For example, if the cookie URL is http://example.com, we'll
7395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // use the non-Secure cookies for example.com when computing
7405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // document.cookie.
7415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    //
7425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Q: How is the cookieURL different from the document's URL?
7435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // A: The two URLs are the same almost all the time.  However, if one
7445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    //    document inherits the security context of another document, it
7455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    //    inherits its cookieURL but not its URL.
7465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    //
7475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    const KURL& cookieURL() const { return m_cookieURL; }
7485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setCookieURL(const KURL& url) { m_cookieURL = url; }
7495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7507757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch    const KURL& firstPartyForCookies() const;
75102772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch
7525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // The following implements the rule from HTML 4 for what valid names are.
7535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // To get this right for all the XML cases, we probably have to improve this or move it
7545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // and make it sensitive to the type of document.
7555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    static bool isValidName(const String&);
7565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // The following breaks a qualified name into a prefix and a local name.
7585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // It also does a validity check, and returns false if the qualified name
7595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // is invalid.  It also sets ExceptionCode when name is invalid.
760a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    static bool parseQualifiedName(const AtomicString& qualifiedName, AtomicString& prefix, AtomicString& localName, ExceptionState&);
7615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Checks to make sure prefix and namespace do not conflict (per DOM Core 3)
7635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    static bool hasValidNamespaceForElements(const QualifiedName&);
7645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    static bool hasValidNamespaceForAttributes(const QualifiedName&);
7655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    HTMLElement* body() const;
767f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)    void setBody(PassRefPtrWillBeRawPtr<HTMLElement>, ExceptionState&);
7685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
769d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    HTMLHeadElement* head() const;
7705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
77109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    // Decide which element is to define the viewport's overflow policy. If |rootStyle| is set, use
77209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    // that as the style for the root element, rather than obtaining it on our own. The reason for
77309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    // this is that style may not have been associated with the elements yet - in which case it may
77409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    // have been calculated on the fly (without associating it with the actual element) somewhere.
77509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    Element* viewportDefiningElement(RenderStyle* rootStyle = 0) const;
77609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
777d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    DocumentMarkerController& markers() const { return *m_markers; }
7785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool directionSetOnDocumentElement() const { return m_directionSetOnDocumentElement; }
7805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool writingModeSetOnDocumentElement() const { return m_writingModeSetOnDocumentElement; }
7815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setDirectionSetOnDocumentElement(bool b) { m_directionSetOnDocumentElement = b; }
7825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setWritingModeSetOnDocumentElement(bool b) { m_writingModeSetOnDocumentElement = b; }
7835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool execCommand(const String& command, bool userInterface = false, const String& value = String());
7855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool queryCommandEnabled(const String& command);
7865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool queryCommandIndeterm(const String& command);
7875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool queryCommandState(const String& command);
7885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool queryCommandSupported(const String& command);
7895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    String queryCommandValue(const String& command);
7905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    KURL openSearchDescriptionURL();
7925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
7935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // designMode support
79402772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch    enum InheritedBool { off = false, on = true, inherit };
7955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setDesignMode(InheritedBool value);
7965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    InheritedBool getDesignMode() const;
7975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool inDesignMode() const;
79810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch    String designMode() const;
79910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch    void setDesignMode(const String&);
8005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    Document* parentDocument() const;
802d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    Document& topDocument() const;
803f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)    WeakPtrWillBeRawPtr<Document> contextDocument();
8045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ScriptRunner* scriptRunner() { return m_scriptRunner.get(); }
8065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
807521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)    HTMLScriptElement* currentScript() const { return !m_currentScriptStack.isEmpty() ? m_currentScriptStack.last().get() : 0; }
808d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    void pushCurrentScript(PassRefPtrWillBeRawPtr<HTMLScriptElement>);
809521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)    void popCurrentScript();
810521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)
8115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void applyXSLTransform(ProcessingInstruction* pi);
812323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    PassRefPtrWillBeRawPtr<Document> transformSourceDocument() { return m_transformSourceDocument; }
8135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setTransformSourceDocument(Document* doc) { m_transformSourceDocument = doc; }
8145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setTransformSource(PassOwnPtr<TransformSource>);
8165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    TransformSource* transformSource() const { return m_transformSource.get(); }
8175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
818a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch    void incDOMTreeVersion() { ASSERT(m_lifecycle.stateAllowsTreeMutations()); m_domTreeVersion = ++s_globalTreeVersion; }
8195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    uint64_t domTreeVersion() const { return m_domTreeVersion; }
8205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    enum PendingSheetLayout { NoLayoutWithPendingSheets, DidLayoutWithPendingSheets, IgnoreLayoutWithPendingSheets };
8225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool didLayoutWithPendingStylesheets() const { return m_pendingSheetLayout == DidLayoutWithPendingSheets; }
8245d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)    bool ignoreLayoutWithPendingStylesheets() const { return m_pendingSheetLayout == IgnoreLayoutWithPendingSheets; }
8255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool hasNodesWithPlaceholderStyle() const { return m_hasNodesWithPlaceholderStyle; }
8275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setHasNodesWithPlaceholderStyle() { m_hasNodesWithPlaceholderStyle = true; }
8285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
82951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)    Vector<IconURL> iconURLs(int iconTypesMask);
8305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
831197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    Color themeColor() const;
8325d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)
833d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    // Returns the HTMLLinkElement currently in use for the Web Manifest.
834d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    // Returns null if there is no such element.
835d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    HTMLLinkElement* linkManifest() const;
836d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)
8375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setUseSecureKeyboardEntryWhenActive(bool);
8385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool useSecureKeyboardEntryWhenActive() const;
8395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void updateFocusAppearanceSoon(bool restorePreviousSelection);
8415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void cancelFocusAppearanceUpdate();
84202772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch
8435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Extension for manipulating canvas drawing contexts for use in CSS
844e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    void getCSSCanvasContext(const String& type, const String& name, int width, int height, RefPtrWillBeRawPtr<CanvasRenderingContext2D>&, RefPtrWillBeRawPtr<WebGLRenderingContext>&);
845d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    HTMLCanvasElement& getCSSCanvasElement(const String& name);
8465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool isDNSPrefetchEnabled() const { return m_isDNSPrefetchEnabled; }
8485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void parseDNSPrefetchControlHeader(const String&);
8495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
85076c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    // FIXME(crbug.com/305497): This should be removed once LocalDOMWindow is an ExecutionContext.
85151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)    virtual void postTask(PassOwnPtr<ExecutionContextTask>) OVERRIDE; // Executes the task on context's thread asynchronously.
852197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    void postInspectorTask(PassOwnPtr<ExecutionContextTask>);
8535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
85409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    virtual void tasksWereSuspended() OVERRIDE FINAL;
85509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    virtual void tasksWereResumed() OVERRIDE FINAL;
85609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    virtual void suspendScheduledTasks() OVERRIDE FINAL;
85709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    virtual void resumeScheduledTasks() OVERRIDE FINAL;
85809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    virtual bool tasksNeedSuspension() OVERRIDE FINAL;
85981a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)
86081a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)    void finishedParsing();
8615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
86251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)    void setEncodingData(const DocumentEncodingData& newData);
86309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    const WTF::TextEncoding& encoding() const { return m_encodingData.encoding(); }
8645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
86509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    bool encodingWasDetectedHeuristically() const { return m_encodingData.wasDetectedHeuristically(); }
86609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    bool sawDecodingError() const { return m_encodingData.sawDecodingError(); }
867c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)
8685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setAnnotatedRegionsDirty(bool f) { m_annotatedRegionsDirty = f; }
8695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool annotatedRegionsDirty() const { return m_annotatedRegionsDirty; }
8705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool hasAnnotatedRegions () const { return m_hasAnnotatedRegions; }
8715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setHasAnnotatedRegions(bool f) { m_hasAnnotatedRegions = f; }
8725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    const Vector<AnnotatedRegionValue>& annotatedRegions() const;
8735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setAnnotatedRegions(const Vector<AnnotatedRegionValue>&);
8745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
87509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    virtual void removeAllEventListeners() OVERRIDE FINAL;
8765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    const SVGDocumentExtensions* svgExtensions();
878d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    SVGDocumentExtensions& accessSVGExtensions();
8795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void initSecurityContext();
881e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch    void initSecurityContext(const DocumentInit&);
8827242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    void initContentSecurityPolicy(PassRefPtr<ContentSecurityPolicy> = nullptr);
8835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
884c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    bool allowInlineEventHandlers(Node*, EventListener*, const String& contextURL, const WTF::OrdinalNumber& contextLine);
8858abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)    bool allowExecutingScripts(Node*);
886c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)
8875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void statePopped(PassRefPtr<SerializedScriptValue>);
8885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8893c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch    enum LoadEventProgress {
8903c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch        LoadEventNotRun,
8913c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch        LoadEventInProgress,
8923c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch        LoadEventCompleted,
893e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)        BeforeUnloadEventInProgress,
894e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)        BeforeUnloadEventCompleted,
895e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)        PageHideInProgress,
8963c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch        UnloadEventInProgress,
8973c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch        UnloadEventHandled
8983c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch    };
8993c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch    bool loadEventStillNeeded() const { return m_loadEventProgress == LoadEventNotRun; }
9003c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch    bool processingLoadEvent() const { return m_loadEventProgress == LoadEventInProgress; }
9013c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch    bool loadEventFinished() const { return m_loadEventProgress >= LoadEventCompleted; }
90209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    bool unloadStarted() const { return m_loadEventProgress >= PageHideInProgress; }
9035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
90419cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles)    void setContainsPlugins() { m_containsPlugins = true; }
90519cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles)    bool containsPlugins() const { return m_containsPlugins; }
90619cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles)
90709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    virtual bool isContextThread() const OVERRIDE FINAL;
90809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    virtual bool isJSExecutionForbidden() const OVERRIDE FINAL { return false; }
9095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool containsValidityStyleRules() const { return m_containsValidityStyleRules; }
9115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void setContainsValidityStyleRules() { m_containsValidityStyleRules = true; }
9125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
91351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)    void enqueueResizeEvent();
9141e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    void enqueueScrollEventForNode(Node*);
915a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch    void enqueueAnimationFrameEvent(PassRefPtrWillBeRawPtr<Event>);
9167242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    // Only one event for a target/event type combination will be dispatched per frame.
9177242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    void enqueueUniqueAnimationFrameEvent(PassRefPtrWillBeRawPtr<Event>);
918197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    void enqueueMediaQueryChangeListeners(WillBeHeapVector<RefPtrWillBeMember<MediaQueryListListener> >&);
9195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9209e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    bool hasFullscreenSupplement() const { return m_hasFullscreenSupplement; }
9219e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    void setHasFullscreenSupplement() { m_hasFullscreenSupplement = true; }
9225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
923d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    void exitPointerLock();
924d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    Element* pointerLockElement() const;
9255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Used to allow element that loads data without going through a FrameLoader to delay the 'load' event.
9275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void incrementLoadEventDelayCount() { ++m_loadEventDelayCount; }
9285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void decrementLoadEventDelayCount();
929f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    void checkLoadEventSoon();
930f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    bool isDelayingLoadEvent();
93109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    void loadPluginsSoon();
9325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
93376c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    PassRefPtrWillBeRawPtr<Touch> createTouch(LocalDOMWindow*, EventTarget*, int identifier, double pageX, double pageY, double screenX, double screenY, double radiusX, double radiusY, float rotationAngle, float force) const;
934d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    PassRefPtrWillBeRawPtr<TouchList> createTouchList(WillBeHeapVector<RefPtrWillBeMember<Touch> >&) const;
9355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
936d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    const DocumentTiming& timing() const { return m_documentTiming; }
9375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9387242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    int requestAnimationFrame(RequestAnimationFrameCallback*);
9395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void cancelAnimationFrame(int id);
9405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void serviceScriptedAnimations(double monotonicAnimationStartTime);
9415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
94209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    virtual EventTarget* errorEventTarget() OVERRIDE FINAL;
9437242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    virtual void logExceptionToConsole(const String& errorMessage, int scriptId, const String& sourceURL, int lineNumber, int columnNumber, PassRefPtrWillBeRawPtr<ScriptCallStack>) OVERRIDE FINAL;
9445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void initDNSPrefetch();
9465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool isInDocumentWrite() { return m_writeRecursionDepth > 0; }
9485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
949926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    IntSize initialViewportSize() const;
950926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
951a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    TextAutosizer* textAutosizer();
9525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
953d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    PassRefPtrWillBeRawPtr<Element> createElement(const AtomicString& localName, const AtomicString& typeExtension, ExceptionState&);
954d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    PassRefPtrWillBeRawPtr<Element> createElementNS(const AtomicString& namespaceURI, const AtomicString& qualifiedName, const AtomicString& typeExtension, ExceptionState&);
955e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    ScriptValue registerElement(ScriptState*, const AtomicString& name, ExceptionState&);
956e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    ScriptValue registerElement(ScriptState*, const AtomicString& name, const Dictionary& options, ExceptionState&, CustomElement::NameSet validNames = CustomElement::StandardNames);
957e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch    CustomElementRegistrationContext* registrationContext() { return m_registrationContext.get(); }
958197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    CustomElementMicrotaskRunQueue* customElementMicrotaskRunQueue();
959926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
9606f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch    void setImportsController(HTMLImportsController*);
9616f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch    HTMLImportsController* importsController() const { return m_importsController; }
9626f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch    HTMLImportLoader* importLoader() const;
9636f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch
9645267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    bool haveImportsLoaded() const;
9655267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    void didLoadAllImports();
9665267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)
96751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)    void adjustFloatQuadsForScrollAndAbsoluteZoom(Vector<FloatQuad>&, RenderObject&);
96851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)    void adjustFloatRectForScrollAndAbsoluteZoom(FloatRect&, RenderObject&);
9695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
970926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    bool hasActiveParser();
97153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    unsigned activeParserCount() { return m_activeParserCount; }
972926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    void incrementActiveParserCount() { ++m_activeParserCount; }
973926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    void decrementActiveParserCount();
974926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
975d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    void setContextFeatures(ContextFeatures&);
976d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    ContextFeatures& contextFeatures() const { return *m_contextFeatures; }
9775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
97809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    ElementDataCache* elementDataCache() { return m_elementDataCache.get(); }
9795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
98043e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles)    void didLoadAllScriptBlockingResources();
9815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void didRemoveAllPendingStylesheet();
9825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void clearStyleResolver();
9835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
98409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    bool inStyleRecalc() const { return m_lifecycle.state() == DocumentLifecycle::InStyleRecalc; }
9855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
9865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Return a Locale for the default locale if the argument is null or empty.
9875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    Locale& getCachedLocale(const AtomicString& locale = nullAtom);
9885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
989d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    AnimationClock& animationClock() { return m_animationClock; }
990d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    AnimationTimeline& timeline() const { return *m_timeline; }
991a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch    CompositorPendingAnimations& compositorPendingAnimations() { return m_compositorPendingAnimations; }
99281a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)
993e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch    void addToTopLayer(Element*, const Element* before = 0);
994926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    void removeFromTopLayer(Element*);
995323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    const WillBeHeapVector<RefPtrWillBeMember<Element> >& topLayerElements() const { return m_topLayerElements; }
996c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    HTMLDialogElement* activeModalDialog() const;
997926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
99809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    // A non-null m_templateDocumentHost implies that |this| was created by ensureTemplateDocument().
99909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    bool isTemplateDocument() const { return !!m_templateDocumentHost; }
10008abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)    Document& ensureTemplateDocument();
1001926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    Document* templateDocumentHost() { return m_templateDocumentHost; }
1002926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1003926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    void didAssociateFormControl(Element*);
1004926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
10057242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    virtual void addConsoleMessage(PassRefPtrWillBeRawPtr<ConsoleMessage>) OVERRIDE FINAL;
1006926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
100776c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    virtual LocalDOMWindow* executingWindow() OVERRIDE FINAL;
1008d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    LocalFrame* executingFrame();
10093c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch
1010f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)    DocumentLifecycleNotifier& lifecycleNotifier();
101109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    DocumentLifecycle& lifecycle() { return m_lifecycle; }
101209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    bool isActive() const { return m_lifecycle.isActive(); }
101309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    bool isStopped() const { return m_lifecycle.state() == DocumentLifecycle::Stopped; }
1014323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    bool isDisposed() const { return m_lifecycle.state() == DocumentLifecycle::Disposed; }
1015521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)
10163c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch    enum HttpRefreshType {
10173c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch        HttpRefreshFromHeader,
10183c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch        HttpRefreshFromMetaTag
10193c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch    };
10203c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch    void maybeHandleHttpRefresh(const String&, HttpRefreshType);
10213c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch
1022f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)    void updateSecurityOrigin(PassRefPtr<SecurityOrigin>);
1023f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)    PassOwnPtr<LifecycleNotifier<Document> > createLifecycleNotifier();
1024f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)
102509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    void setHasViewportUnits() { m_hasViewportUnits = true; }
102609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    bool hasViewportUnits() const { return m_hasViewportUnits; }
102709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    void notifyResizeForViewportUnits();
102809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
102909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    void registerVisibilityObserver(DocumentVisibilityObserver*);
103009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    void unregisterVisibilityObserver(DocumentVisibilityObserver*);
103109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
1032d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    void updateStyleInvalidationIfNeeded();
1033d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
1034a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch    virtual void trace(Visitor*) OVERRIDE;
1035a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch
1036f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)    bool hasSVGFilterElementsRequiringLayerUpdate() const { return m_layerUpdateSVGFilterElements.size(); }
1037f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    void didRecalculateStyleForElement() { ++m_styleRecalcElementCounter; }
103810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch
1039e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)    AtomicString convertLocalName(const AtomicString&);
1040e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)
10417242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    virtual v8::Handle<v8::Object> wrap(v8::Handle<v8::Object> creationContext, v8::Isolate*) OVERRIDE;
10427242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    virtual v8::Handle<v8::Object> associateWithWrapper(const WrapperTypeInfo*, v8::Handle<v8::Object> wrapper, v8::Isolate*) OVERRIDE;
10437242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
10445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)protected:
1045e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch    Document(const DocumentInit&, DocumentClassFlags = DefaultDocumentClass);
10465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
104709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    virtual void didUpdateSecurityOrigin() OVERRIDE FINAL;
10485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
10495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void clearXMLVersion() { m_xmlVersion = String(); }
10505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1051f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)#if !ENABLE(OILPAN)
1052e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch    virtual void dispose() OVERRIDE;
1053f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)#endif
1054e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch
1055d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    virtual PassRefPtrWillBeRawPtr<Document> cloneDocumentWithoutChildren();
1056bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)
1057f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)    bool importContainerNodeChildren(ContainerNode* oldContainerNode, PassRefPtrWillBeRawPtr<ContainerNode> newContainerNode, ExceptionState&);
105810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch    void lockCompatibilityMode() { m_compatibilityModeLocked = true; }
1059d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
10605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private:
10615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    friend class Node;
10625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    friend class IgnoreDestructiveWriteCountIncrementer;
10635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1064c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    bool isDocumentFragment() const WTF_DELETED_FUNCTION; // This will catch anyone doing an unnecessary check.
1065c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    bool isDocumentNode() const WTF_DELETED_FUNCTION; // This will catch anyone doing an unnecessary check.
1066c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    bool isElementNode() const WTF_DELETED_FUNCTION; // This will catch anyone doing an unnecessary check.
1067c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)
10681e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    ScriptedAnimationController& ensureScriptedAnimationController();
106909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    virtual SecurityContext& securityContext() OVERRIDE FINAL { return *this; }
107009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    virtual EventQueue* eventQueue() const OVERRIDE FINAL;
107109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
1072a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch    // FIXME: Rename the StyleRecalc state to RenderTreeUpdate.
10736f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch    bool hasPendingStyleRecalc() const { return m_lifecycle.state() == DocumentLifecycle::VisualUpdatePending; }
1074a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch
107510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch    bool shouldScheduleRenderTreeUpdate() const;
107610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch    void scheduleRenderTreeUpdate();
107710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch
107810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch    bool needsFullRenderTreeUpdate() const;
107910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch
108009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    void inheritHtmlAndBodyElementStyles(StyleRecalcChange);
10811e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)
108207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch    bool dirtyElementsForLayerUpdate();
1083f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)    void updateDistributionIfNeeded();
108409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    void updateUseShadowTreesIfNeeded();
108507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch    void evaluateMediaQueryListIfNeeded();
108609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
108707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch    void updateRenderTree(StyleRecalcChange);
108809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    void updateStyle(StyleRecalcChange);
1089f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)
10905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void detachParser();
10915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1092f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    void clearWeakMembers(Visitor*);
1093f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu
109409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    virtual bool isDocument() const OVERRIDE FINAL { return true; }
10955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1096197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    virtual void childrenChanged(const ChildrenChange&) OVERRIDE;
10975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
109809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    virtual String nodeName() const OVERRIDE FINAL;
109909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    virtual NodeType nodeType() const OVERRIDE FINAL;
110009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    virtual bool childTypeAllowed(NodeType) const OVERRIDE FINAL;
1101d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    virtual PassRefPtrWillBeRawPtr<Node> cloneNode(bool deep = true) OVERRIDE FINAL;
1102bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)    void cloneDataFromDocument(const Document&);
11035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
11045d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)#if !ENABLE(OILPAN)
110509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    virtual void refExecutionContext() OVERRIDE FINAL { ref(); }
110609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    virtual void derefExecutionContext() OVERRIDE FINAL { deref(); }
11075d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)#endif
11085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
110909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    virtual const KURL& virtualURL() const OVERRIDE FINAL; // Same as url(), but needed for ExecutionContext to implement it without a performance loss for direct calls.
111009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    virtual KURL virtualCompleteURL(const String&) const OVERRIDE FINAL; // Same as completeURL() for the same reason as above.
11115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
111209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    virtual void reportBlockedScriptExecutionToInspector(const String& directiveText) OVERRIDE FINAL;
11135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
111409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    virtual double timerAlignmentInterval() const OVERRIDE FINAL;
11155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1116c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    void updateTitle(const String&);
11175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void updateFocusAppearanceTimerFired(Timer<Document>*);
11185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void updateBaseURL();
11195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1120d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    void executeScriptsWaitingForResourcesTimerFired(Timer<Document>*);
11215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
11225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void loadEventDelayTimerFired(Timer<Document>*);
112309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    void pluginLoadingTimerFired(Timer<Document>*);
11245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
112551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)    PageVisibilityState pageVisibilityState() const;
11265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
112776c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    // Note that dispatching a window load event may cause the LocalDOMWindow to be detached from
112876c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    // the LocalFrame, so callers should take a reference to the LocalDOMWindow (which owns us) to
11295267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    // prevent the Document from getting blown away from underneath them.
11305267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)    void dispatchWindowLoadEvent();
11315267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)
11325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void addListenerType(ListenerType listenerType) { m_listenerTypes |= listenerType; }
11335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void addMutationEventListenerTypeIfEnabled(ListenerType);
11345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1135926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    void didAssociateFormControlsTimerFired(Timer<Document>*);
113609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
113709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    void clearFocusedElementSoon();
113809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    void clearFocusedElementTimerFired(Timer<Document>*);
1139e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch
1140a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    void processHttpEquivDefaultStyle(const AtomicString& content);
1141a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    void processHttpEquivRefresh(const AtomicString& content);
1142a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    void processHttpEquivSetCookie(const AtomicString& content);
1143a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    void processHttpEquivXFrameOptions(const AtomicString& content);
1144a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    void processHttpEquivContentSecurityPolicy(const AtomicString& equiv, const AtomicString& content);
1145e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch
1146a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch    bool haveStylesheetsLoaded() const;
114709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
1148f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)    void setHoverNode(PassRefPtrWillBeRawPtr<Node>);
1149f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)    Node* hoverNode() const { return m_hoverNode.get(); }
1150f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)
11515d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)    typedef HashSet<OwnPtr<EventFactoryBase> > EventFactorySet;
1152f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)    static EventFactorySet& eventFactories();
1153f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)
115409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    DocumentLifecycle m_lifecycle;
11551e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)
11565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool m_hasNodesWithPlaceholderStyle;
11578abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)    bool m_evaluateMediaQueriesOnStyleRecalc;
11585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
11595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // If we do ignore the pending stylesheet count, then we need to add a boolean
11605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // to track that this happened so that we can do a full repaint when the stylesheets
11615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // do eventually load.
11625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    PendingSheetLayout m_pendingSheetLayout;
11635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
11647242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    RawPtrWillBeMember<LocalFrame> m_frame;
116576c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)    RawPtrWillBeMember<LocalDOMWindow> m_domWindow;
1166f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)    // FIXME: oilpan: when we get rid of the transition types change the
1167f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)    // HTMLImportsController to not be a DocumentSupplement since it is
1168f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)    // redundant with oilpan.
1169f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)    RawPtrWillBeMember<HTMLImportsController> m_importsController;
11705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1171323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    RefPtrWillBeMember<ResourceFetcher> m_fetcher;
1172d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    RefPtrWillBeMember<DocumentParser> m_parser;
1173926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    unsigned m_activeParserCount;
1174323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    RefPtrWillBeMember<ContextFeatures> m_contextFeatures;
11755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
11765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool m_wellFormed;
11775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
11785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Document URLs.
11795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    KURL m_url; // Document.URL: The URL from which this document was retrieved.
11805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    KURL m_baseURL; // Node.baseURI: The URL to use when resolving relative URLs.
11815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    KURL m_baseURLOverride; // An alternative base URL that takes precedence over m_baseURL (but not m_baseElementURL).
11825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    KURL m_baseElementURL; // The URL set by the <base> element.
11835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    KURL m_cookieURL; // The URL to use for cookie access.
11845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
118509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    AtomicString m_baseTarget;
11865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1187aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    // Mime-type of the document in case it was cloned or created by XHR.
1188aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    AtomicString m_mimeType;
1189aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch
1190323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    RefPtrWillBeMember<DocumentType> m_docType;
1191323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    OwnPtrWillBeMember<DOMImplementation> m_implementation;
11925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1193323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    RefPtrWillBeMember<CSSStyleSheet> m_elemSheet;
11945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
11955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool m_printing;
11965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool m_paginatedForScreen;
11975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
11985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    CompatibilityMode m_compatibilityMode;
11995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool m_compatibilityModeLocked; // This is cheaper than making setCompatibilityMode virtual.
12005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1201d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    Timer<Document> m_executeScriptsWaitingForResourcesTimer;
1202d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)
120309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    bool m_hasAutofocused;
120409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    Timer<Document> m_clearFocusedElementTimer;
1205323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    RefPtrWillBeMember<Element> m_autofocusElement;
1206323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    RefPtrWillBeMember<Element> m_focusedElement;
1207323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    RefPtrWillBeMember<Node> m_hoverNode;
1208323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    RefPtrWillBeMember<Element> m_activeHoverElement;
1209323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    RefPtrWillBeMember<Element> m_documentElement;
1210926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    UserActionElementSet m_userActionElements;
12115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
12125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    uint64_t m_domTreeVersion;
12135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    static uint64_t s_globalTreeVersion;
121402772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch
1215d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    WillBeHeapHashSet<RawPtrWillBeWeakMember<NodeIterator> > m_nodeIterators;
1216f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)    typedef WillBeHeapHashSet<RawPtrWillBeWeakMember<Range> > AttachedRangeSet;
1217f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)    AttachedRangeSet m_ranges;
12185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
12195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    unsigned short m_listenerTypes;
12205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
12215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    MutationObserverOptions m_mutationObserverTypes;
12225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1223323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    OwnPtrWillBeMember<StyleEngine> m_styleEngine;
1224f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    RefPtrWillBeMember<StyleSheetList> m_styleSheetList;
12255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1226323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    OwnPtrWillBeMember<FormController> m_formController;
12275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1228e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch    TextLinkColors m_textLinkColors;
1229c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    const OwnPtrWillBeMember<VisitedLinkState> m_visitedLinkState;
12305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
12315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool m_visuallyOrdered;
12325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ReadyState m_readyState;
123309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    bool m_isParsing;
12345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
12355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool m_gotoAnchorNeededAfterStylesheetsLoad;
12365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool m_isDNSPrefetchEnabled;
12375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool m_haveExplicitlyDisabledDNSPrefetch;
12385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool m_containsValidityStyleRules;
12395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool m_updateFocusAppearanceRestoresSelection;
124019cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles)    bool m_containsPlugins;
12415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
12425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // http://www.whatwg.org/specs/web-apps/current-work/#ignore-destructive-writes-counter
12435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    unsigned m_ignoreDestructiveWriteCount;
12445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1245c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    String m_title;
1246c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    String m_rawTitle;
1247323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    RefPtrWillBeMember<Element> m_titleElement;
12485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
12495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    OwnPtr<AXObjectCache> m_axObjectCache;
1250d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    OwnPtrWillBeMember<DocumentMarkerController> m_markers;
125102772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch
12525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    Timer<Document> m_updateFocusAppearanceTimer;
12535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1254f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)    RawPtrWillBeMember<Element> m_cssTarget;
12555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
12563c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch    LoadEventProgress m_loadEventProgress;
12575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
12585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    double m_startTime;
125902772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch
1260f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)    OwnPtrWillBeMember<ScriptRunner> m_scriptRunner;
12615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1262323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    WillBeHeapVector<RefPtrWillBeMember<HTMLScriptElement> > m_currentScriptStack;
1263521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)
12645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    OwnPtr<TransformSource> m_transformSource;
1265323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    RefPtrWillBeMember<Document> m_transformSourceDocument;
12665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
12675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    String m_xmlEncoding;
12685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    String m_xmlVersion;
12695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    unsigned m_xmlStandalone : 2;
12705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    unsigned m_hasXMLDeclaration : 1;
12715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1272a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    AtomicString m_contentLanguage;
12735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
127451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)    DocumentEncodingData m_encodingData;
12755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
12765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    InheritedBool m_designMode;
12775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1278d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    WillBeHeapHashSet<RawPtrWillBeWeakMember<const LiveNodeListBase> > m_listsInvalidatedAtDocument;
1279d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)#if ENABLE(OILPAN)
1280d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    // Oilpan keeps track of all registered NodeLists.
1281d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    //
1282d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    // FIXME: Oilpan: improve - only need to know if a NodeList
1283d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    // is currently alive or not for the different types.
1284d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    HeapHashSet<WeakMember<const LiveNodeListBase> > m_nodeLists[numNodeListInvalidationTypes];
1285d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)#else
12865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    unsigned m_nodeListCounts[numNodeListInvalidationTypes];
1287d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)#endif
12885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1289d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    OwnPtrWillBeMember<SVGDocumentExtensions> m_svgExtensions;
12905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
12915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    Vector<AnnotatedRegionValue> m_annotatedRegions;
12925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool m_hasAnnotatedRegions;
12935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool m_annotatedRegionsDirty;
12945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1295323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    WillBeHeapHashMap<String, RefPtrWillBeMember<HTMLCanvasElement> > m_cssCanvasElements;
12965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
12975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    OwnPtr<SelectorQueryCache> m_selectorQueryCache;
12985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
12995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool m_useSecureKeyboardEntryWhenActive;
13005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
130181a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)    DocumentClassFlags m_documentClasses;
13025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
13035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool m_isViewSource;
13045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool m_sawElementsInKnownNamespaces;
13055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool m_isSrcdocDocument;
13068abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)    bool m_isMobileDocument;
1307d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    bool m_isTransitionDocument;
13085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
13091e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    RenderView* m_renderView;
13105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1311f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)#if !ENABLE(OILPAN)
1312926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    WeakPtrFactory<Document> m_weakFactory;
1313f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)#endif
1314f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)    WeakPtrWillBeWeakMember<Document> m_contextDocument;
13155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
13169e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)    bool m_hasFullscreenSupplement; // For early return in Fullscreen::fromIfExists()
13175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1318323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    WillBeHeapVector<RefPtrWillBeMember<Element> > m_topLayerElements;
1319926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
13205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    int m_loadEventDelayCount;
13215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    Timer<Document> m_loadEventDelayTimer;
132209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    Timer<Document> m_pluginLoadingTimer;
13235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
13241e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    ViewportDescription m_viewportDescription;
13251e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    ViewportDescription m_legacyViewportDescription;
1326aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch    Length m_viewportDefaultMinWidth;
13275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
132809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    bool m_didSetReferrerPolicy;
13295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ReferrerPolicy m_referrerPolicy;
13305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
13315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool m_directionSetOnDocumentElement;
13325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool m_writingModeSetOnDocumentElement;
13335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    DocumentTiming m_documentTiming;
1334f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    RefPtrWillBeMember<MediaQueryMatcher> m_mediaQueryMatcher;
13355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool m_writeRecursionIsTooDeep;
13365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    unsigned m_writeRecursionDepth;
133702772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch
13385d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)    RefPtrWillBeMember<ScriptedAnimationController> m_scriptedAnimationController;
133951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)    OwnPtr<MainThreadTaskRunner> m_taskRunner;
1340c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    OwnPtrWillBeMember<TextAutosizer> m_textAutosizer;
13415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1342d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    RefPtrWillBeMember<CustomElementRegistrationContext> m_registrationContext;
1343197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    RefPtrWillBeMember<CustomElementMicrotaskRunQueue> m_customElementMicrotaskRunQueue;
1344926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
134509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    void elementDataCacheClearTimerFired(Timer<Document>*);
134609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    Timer<Document> m_elementDataCacheClearTimer;
13475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1348197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    OwnPtrWillBeMember<ElementDataCache> m_elementDataCache;
13495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
13505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    typedef HashMap<AtomicString, OwnPtr<Locale> > LocaleIdentifierToLocaleMap;
13515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    LocaleIdentifierToLocaleMap m_localeCache;
1352926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1353d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    AnimationClock m_animationClock;
1354d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    RefPtrWillBeMember<AnimationTimeline> m_timeline;
1355a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch    CompositorPendingAnimations m_compositorPendingAnimations;
135681a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)
1357323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    RefPtrWillBeMember<Document> m_templateDocument;
1358323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    // With Oilpan the templateDocument and the templateDocumentHost
1359323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    // live and die together. Without Oilpan, the templateDocumentHost
1360323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    // is a manually managed backpointer from m_templateDocument.
1361323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    RawPtrWillBeMember<Document> m_templateDocumentHost;
1362926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1363926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    Timer<Document> m_didAssociateFormControlsTimer;
1364323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    WillBeHeapHashSet<RefPtrWillBeMember<Element> > m_associatedFormControls;
136509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
13665d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)    WillBeHeapHashSet<RawPtrWillBeMember<SVGUseElement> > m_useElementsNeedingUpdate;
13675d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)    WillBeHeapHashSet<RawPtrWillBeMember<Element> > m_layerUpdateSVGFilterElements;
136809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
136909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    bool m_hasViewportUnits;
137009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
1371f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    typedef WillBeHeapHashSet<RawPtrWillBeWeakMember<DocumentVisibilityObserver> > DocumentVisibilityObserverSet;
1372f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    DocumentVisibilityObserverSet m_visibilityObservers;
1373f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu
1374f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu    int m_styleRecalcElementCounter;
13755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)};
13765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1377bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)inline bool Document::shouldOverrideLegacyDescription(ViewportDescription::Type origin)
13788abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles){
13798abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)    // The different (legacy) meta tags have different priorities based on the type
13808abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)    // regardless of which order they appear in the DOM. The priority is given by the
13811e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    // ViewportDescription::Type enum.
13821e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    return origin >= m_legacyViewportDescription.type;
13838abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)}
13848abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)
1385a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdochinline void Document::scheduleRenderTreeUpdateIfNeeded()
1386a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch{
1387a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch    // Inline early out to avoid the function calls below.
1388a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch    if (hasPendingStyleRecalc())
1389a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        return;
1390a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch    if (shouldScheduleRenderTreeUpdate() && needsRenderTreeUpdate())
1391a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch        scheduleRenderTreeUpdate();
1392a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch}
1393a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch
139409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)DEFINE_TYPE_CASTS(Document, ExecutionContext, context, context->isDocument(), context.isDocument());
13951e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)DEFINE_NODE_TYPE_CASTS(Document, isDocumentNode());
1396926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1397a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)#define DEFINE_DOCUMENT_TYPE_CASTS(thisType) \
1398a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    DEFINE_TYPE_CASTS(thisType, Document, document, document->is##thisType(), document.is##thisType())
1399a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)
1400197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch// This is needed to avoid ambiguous overloads with the Node and TreeScope versions.
1401197021e6b966cfb06891637935ef33fff06433d1Ben MurdochDEFINE_COMPARISON_OPERATORS_WITH_REFERENCES(Document)
1402926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
14035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Put these methods here, because they require the Document definition, but we really want to inline them.
14045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
14055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline bool Node::isDocumentNode() const
14065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
140709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    return this == document();
14085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
14095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
14105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Node* eventTargetNodeForDocument(Document*);
14115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1412c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink
14135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1414197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#ifndef NDEBUG
1415197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch// Outside the WebCore namespace for ease of invocation from gdb.
1416197021e6b966cfb06891637935ef33fff06433d1Ben Murdochvoid showLiveDocumentInstances();
1417197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#endif
1418197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch
14195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif // Document_h
1420