| Index: Source/core/dom/Document.cpp
|
| diff --git a/Source/core/dom/Document.cpp b/Source/core/dom/Document.cpp
|
| index 7b2b3e19dc6e22862cbf27c81fa3109808fadf5b..c0111e6da9a98f2a02ebbcb44df66ed7f79e544f 100644
|
| --- a/Source/core/dom/Document.cpp
|
| +++ b/Source/core/dom/Document.cpp
|
| @@ -368,7 +368,7 @@ private:
|
| }
|
| };
|
|
|
| -Document::Document(Frame* frame, const KURL& url, DocumentClassFlags documentClasses)
|
| +Document::Document(const DocumentInit& initializer, DocumentClassFlags documentClasses)
|
| : ContainerNode(0, CreateDocument)
|
| , TreeScope(this)
|
| , m_styleResolverThrowawayTimer(this, &Document::styleResolverThrowawayTimerFired)
|
| @@ -378,8 +378,9 @@ Document::Document(Frame* frame, const KURL& url, DocumentClassFlags documentCla
|
| , m_needsNotifyRemoveAllPendingStylesheet(false)
|
| , m_hasNodesWithPlaceholderStyle(false)
|
| , m_pendingSheetLayout(NoLayoutWithPendingSheets)
|
| - , m_frame(frame)
|
| + , m_frame(initializer.frame())
|
| , m_domWindow(0)
|
| + , m_import(initializer.import())
|
| , m_activeParserCount(0)
|
| , m_contextFeatures(ContextFeatures::defaultSwitch())
|
| , m_wellFormed(false)
|
| @@ -442,7 +443,6 @@ Document::Document(Frame* frame, const KURL& url, DocumentClassFlags documentCla
|
| , m_prerenderer(Prerenderer::create(this))
|
| , m_textAutosizer(TextAutosizer::create(this))
|
| , m_pendingTasksTimer(this, &Document::pendingTasksTimerFired)
|
| - , m_import(0)
|
| , m_scheduledTasksAreSuspended(false)
|
| , m_sharedObjectPoolClearTimer(this, &Document::sharedObjectPoolClearTimerFired)
|
| #ifndef NDEBUG
|
| @@ -470,10 +470,10 @@ Document::Document(Frame* frame, const KURL& url, DocumentClassFlags documentCla
|
| // See fast/dom/early-frame-url.html
|
| // and fast/dom/location-new-window-no-crash.html, respectively.
|
| // FIXME: Can/should we unify this behavior?
|
| - if ((m_frame && m_frame->ownerElement()) || !url.isEmpty())
|
| - setURL(url);
|
| + if (initializer.shouldSetURL())
|
| + setURL(initializer.url());
|
|
|
| - initSecurityContext();
|
| + initSecurityContext(initializer);
|
| initDNSPrefetch();
|
|
|
| for (unsigned i = 0; i < WTF_ARRAY_LENGTH(m_nodeListCounts); i++)
|
| @@ -4185,12 +4185,17 @@ static bool isEligibleForSeamless(Document* parent, Document* child)
|
|
|
| void Document::initSecurityContext()
|
| {
|
| + initSecurityContext(DocumentInit(m_url, m_frame, m_import));
|
| +}
|
| +
|
| +void Document::initSecurityContext(const DocumentInit& initializer)
|
| +{
|
| if (haveInitializedSecurityOrigin()) {
|
| ASSERT(securityOrigin());
|
| return;
|
| }
|
|
|
| - if (!m_frame) {
|
| + if (!initializer.frame()) {
|
| // No source for a security context.
|
| // This can occur via document.implementation.createDocument().
|
| m_cookieURL = KURL(ParsedURLString, emptyString());
|
| @@ -4202,11 +4207,11 @@ void Document::initSecurityContext()
|
| // In the common case, create the security context from the currently
|
| // loading URL with a fresh content security policy.
|
| m_cookieURL = m_url;
|
| - enforceSandboxFlags(m_frame->loader()->effectiveSandboxFlags());
|
| + enforceSandboxFlags(initializer.sandboxFlags());
|
| setSecurityOrigin(isSandboxed(SandboxOrigin) ? SecurityOrigin::createUnique() : SecurityOrigin::create(m_url));
|
| setContentSecurityPolicy(ContentSecurityPolicy::create(this));
|
|
|
| - if (Settings* settings = this->settings()) {
|
| + if (Settings* settings = initializer.settings()) {
|
| if (!settings->webSecurityEnabled()) {
|
| // Web security is turned off. We should let this document access every other document. This is used primary by testing
|
| // harnesses for web sites.
|
| @@ -4225,7 +4230,7 @@ void Document::initSecurityContext()
|
| }
|
|
|
| Document* parentDocument = ownerElement() ? ownerElement()->document() : 0;
|
| - if (parentDocument && m_frame->loader()->shouldTreatURLAsSrcdocDocument(url())) {
|
| + if (parentDocument && initializer.shouldTreatURLAsSrcdocDocument()) {
|
| m_isSrcdocDocument = true;
|
| setBaseURLOverride(parentDocument->baseURL());
|
| }
|
| @@ -4240,10 +4245,7 @@ void Document::initSecurityContext()
|
| // If we do not obtain a meaningful origin from the URL, then we try to
|
| // find one via the frame hierarchy.
|
|
|
| - Frame* ownerFrame = m_frame->tree()->parent();
|
| - if (!ownerFrame)
|
| - ownerFrame = m_frame->loader()->opener();
|
| -
|
| + Frame* ownerFrame = initializer.ownerFrame();
|
| if (!ownerFrame) {
|
| didFailToInitializeSecurityOrigin();
|
| return;
|
| @@ -5117,9 +5119,9 @@ Document* Document::ensureTemplateDocument()
|
| return const_cast<Document*>(document);
|
|
|
| if (isHTMLDocument())
|
| - m_templateDocument = HTMLDocument::create(0, blankURL());
|
| + m_templateDocument = HTMLDocument::create(DocumentInit(blankURL()));
|
| else
|
| - m_templateDocument = Document::create(0, blankURL());
|
| + m_templateDocument = Document::create(DocumentInit(blankURL()));
|
|
|
| m_templateDocument->setTemplateDocumentHost(this); // balanced in dtor.
|
|
|
|
|