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

Side by Side Diff: Source/core/dom/Document.cpp

Issue 18808004: Refactoring: Extract DocumentInit for capture Document construction parameter. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Updated to ToT Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) 3 * (C) 1999 Antti Koivisto (koivisto@kde.org)
4 * (C) 2001 Dirk Mueller (mueller@kde.org) 4 * (C) 2001 Dirk Mueller (mueller@kde.org)
5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org) 5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org)
6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2011, 2012 Apple Inc. All r ights reserved. 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2011, 2012 Apple Inc. All r ights reserved.
7 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/) 7 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/)
8 * Copyright (C) 2008, 2009, 2011, 2012 Google Inc. All rights reserved. 8 * Copyright (C) 2008, 2009, 2011, 2012 Google Inc. All rights reserved.
9 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) 9 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
10 * Copyright (C) Research In Motion Limited 2010-2011. All rights reserved. 10 * Copyright (C) Research In Motion Limited 2010-2011. All rights reserved.
(...skipping 349 matching lines...) Expand 10 before | Expand all | Expand 10 after
360 return; 360 return;
361 if (document->childNeedsStyleRecalc()) 361 if (document->childNeedsStyleRecalc())
362 return; 362 return;
363 if (document->focusedNode()->renderer() && document->focusedNode()->rend erer()->needsLayout()) 363 if (document->focusedNode()->renderer() && document->focusedNode()->rend erer()->needsLayout())
364 return; 364 return;
365 if (!document->focusedNode()->isFocusable()) 365 if (!document->focusedNode()->isFocusable())
366 document->setFocusedElement(0); 366 document->setFocusedElement(0);
367 } 367 }
368 }; 368 };
369 369
370 Document::Document(Frame* frame, const KURL& url, DocumentClassFlags documentCla sses) 370 Document::Document(const DocumentInitializer& initializer, DocumentClassFlags do cumentClasses)
abarth-chromium 2013/07/12 23:32:53 DocumentInitializer -> DocumentInit ? That name m
371 : ContainerNode(0, CreateDocument) 371 : ContainerNode(0, CreateDocument)
372 , TreeScope(this) 372 , TreeScope(this)
373 , m_styleResolverThrowawayTimer(this, &Document::styleResolverThrowawayTimer Fired) 373 , m_styleResolverThrowawayTimer(this, &Document::styleResolverThrowawayTimer Fired)
374 , m_lastStyleResolverAccessTime(0) 374 , m_lastStyleResolverAccessTime(0)
375 , m_didCalculateStyleResolver(false) 375 , m_didCalculateStyleResolver(false)
376 , m_ignorePendingStylesheets(false) 376 , m_ignorePendingStylesheets(false)
377 , m_needsNotifyRemoveAllPendingStylesheet(false) 377 , m_needsNotifyRemoveAllPendingStylesheet(false)
378 , m_hasNodesWithPlaceholderStyle(false) 378 , m_hasNodesWithPlaceholderStyle(false)
379 , m_pendingSheetLayout(NoLayoutWithPendingSheets) 379 , m_pendingSheetLayout(NoLayoutWithPendingSheets)
380 , m_frame(frame) 380 , m_frame(initializer.frame())
381 , m_domWindow(0) 381 , m_domWindow(0)
382 , m_import(initializer.import())
382 , m_activeParserCount(0) 383 , m_activeParserCount(0)
383 , m_contextFeatures(ContextFeatures::defaultSwitch()) 384 , m_contextFeatures(ContextFeatures::defaultSwitch())
384 , m_wellFormed(false) 385 , m_wellFormed(false)
385 , m_printing(false) 386 , m_printing(false)
386 , m_paginatedForScreen(false) 387 , m_paginatedForScreen(false)
387 , m_ignoreAutofocus(false) 388 , m_ignoreAutofocus(false)
388 , m_compatibilityMode(NoQuirksMode) 389 , m_compatibilityMode(NoQuirksMode)
389 , m_compatibilityModeLocked(false) 390 , m_compatibilityModeLocked(false)
390 , m_didPostCheckFocusedNodeTask(false) 391 , m_didPostCheckFocusedNodeTask(false)
391 , m_domTreeVersion(++s_globalTreeVersion) 392 , m_domTreeVersion(++s_globalTreeVersion)
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
434 , m_referrerPolicy(ReferrerPolicyDefault) 435 , m_referrerPolicy(ReferrerPolicyDefault)
435 , m_directionSetOnDocumentElement(false) 436 , m_directionSetOnDocumentElement(false)
436 , m_writingModeSetOnDocumentElement(false) 437 , m_writingModeSetOnDocumentElement(false)
437 , m_writeRecursionIsTooDeep(false) 438 , m_writeRecursionIsTooDeep(false)
438 , m_writeRecursionDepth(0) 439 , m_writeRecursionDepth(0)
439 , m_wheelEventHandlerCount(0) 440 , m_wheelEventHandlerCount(0)
440 , m_lastHandledUserGestureTimestamp(0) 441 , m_lastHandledUserGestureTimestamp(0)
441 , m_prerenderer(Prerenderer::create(this)) 442 , m_prerenderer(Prerenderer::create(this))
442 , m_textAutosizer(TextAutosizer::create(this)) 443 , m_textAutosizer(TextAutosizer::create(this))
443 , m_pendingTasksTimer(this, &Document::pendingTasksTimerFired) 444 , m_pendingTasksTimer(this, &Document::pendingTasksTimerFired)
444 , m_import(0)
445 , m_scheduledTasksAreSuspended(false) 445 , m_scheduledTasksAreSuspended(false)
446 , m_sharedObjectPoolClearTimer(this, &Document::sharedObjectPoolClearTimerFi red) 446 , m_sharedObjectPoolClearTimer(this, &Document::sharedObjectPoolClearTimerFi red)
447 #ifndef NDEBUG 447 #ifndef NDEBUG
448 , m_didDispatchViewportPropertiesChanged(false) 448 , m_didDispatchViewportPropertiesChanged(false)
449 #endif 449 #endif
450 , m_timeline(DocumentTimeline::create(this)) 450 , m_timeline(DocumentTimeline::create(this))
451 , m_templateDocumentHost(0) 451 , m_templateDocumentHost(0)
452 , m_fontloader(0) 452 , m_fontloader(0)
453 , m_didAssociateFormControlsTimer(this, &Document::didAssociateFormControlsT imerFired) 453 , m_didAssociateFormControlsTimer(this, &Document::didAssociateFormControlsT imerFired)
454 { 454 {
455 ScriptWrappable::init(this); 455 ScriptWrappable::init(this);
456 456
457 if (m_frame) { 457 if (m_frame) {
458 provideContextFeaturesToDocumentFrom(this, m_frame->page()); 458 provideContextFeaturesToDocumentFrom(this, m_frame->page());
459 459
460 m_cachedResourceLoader = m_frame->loader()->activeDocumentLoader()->cach edResourceLoader(); 460 m_cachedResourceLoader = m_frame->loader()->activeDocumentLoader()->cach edResourceLoader();
461 } 461 }
462 462
463 if (!m_cachedResourceLoader) 463 if (!m_cachedResourceLoader)
464 m_cachedResourceLoader = CachedResourceLoader::create(0); 464 m_cachedResourceLoader = CachedResourceLoader::create(0);
465 m_cachedResourceLoader->setDocument(this); 465 m_cachedResourceLoader->setDocument(this);
466 466
467 // We depend on the url getting immediately set in subframes, but we 467 // We depend on the url getting immediately set in subframes, but we
468 // also depend on the url NOT getting immediately set in opened windows. 468 // also depend on the url NOT getting immediately set in opened windows.
469 // See fast/dom/early-frame-url.html 469 // See fast/dom/early-frame-url.html
470 // and fast/dom/location-new-window-no-crash.html, respectively. 470 // and fast/dom/location-new-window-no-crash.html, respectively.
471 // FIXME: Can/should we unify this behavior? 471 // FIXME: Can/should we unify this behavior?
472 if ((m_frame && m_frame->ownerElement()) || !url.isEmpty()) 472 if (initializer.shouldSetURL())
473 setURL(url); 473 setURL(initializer.url());
474 474
475 initSecurityContext(); 475 initSecurityContext(initializer);
476 initDNSPrefetch(); 476 initDNSPrefetch();
477 477
478 for (unsigned i = 0; i < WTF_ARRAY_LENGTH(m_nodeListCounts); i++) 478 for (unsigned i = 0; i < WTF_ARRAY_LENGTH(m_nodeListCounts); i++)
479 m_nodeListCounts[i] = 0; 479 m_nodeListCounts[i] = 0;
480 480
481 InspectorCounters::incrementCounter(InspectorCounters::DocumentCounter); 481 InspectorCounters::incrementCounter(InspectorCounters::DocumentCounter);
482 482
483 bool shouldProcessCustomElements = 483 bool shouldProcessCustomElements =
484 (isHTMLDocument() || isXHTMLDocument()) 484 (isHTMLDocument() || isXHTMLDocument())
485 && RuntimeEnabledFeatures::customDOMElementsEnabled(); 485 && RuntimeEnabledFeatures::customDOMElementsEnabled();
(...skipping 3691 matching lines...) Expand 10 before | Expand all | Expand 10 after
4177 return false; 4177 return false;
4178 if (child->isSrcdocDocument()) 4178 if (child->isSrcdocDocument())
4179 return true; 4179 return true;
4180 if (parent->securityOrigin()->canAccess(child->securityOrigin())) 4180 if (parent->securityOrigin()->canAccess(child->securityOrigin()))
4181 return true; 4181 return true;
4182 return parent->securityOrigin()->canRequest(child->url()); 4182 return parent->securityOrigin()->canRequest(child->url());
4183 } 4183 }
4184 4184
4185 void Document::initSecurityContext() 4185 void Document::initSecurityContext()
4186 { 4186 {
4187 initSecurityContext(DocumentInitializer(m_url, m_frame, m_import));
4188 }
4189
4190 void Document::initSecurityContext(const DocumentInitializer& initializer)
4191 {
4187 if (haveInitializedSecurityOrigin()) { 4192 if (haveInitializedSecurityOrigin()) {
4188 ASSERT(securityOrigin()); 4193 ASSERT(securityOrigin());
4189 return; 4194 return;
4190 } 4195 }
4191 4196
4192 if (!m_frame) { 4197 if (!initializer.frame()) {
4193 // No source for a security context. 4198 // No source for a security context.
4194 // This can occur via document.implementation.createDocument(). 4199 // This can occur via document.implementation.createDocument().
4195 m_cookieURL = KURL(ParsedURLString, emptyString()); 4200 m_cookieURL = KURL(ParsedURLString, emptyString());
4196 setSecurityOrigin(SecurityOrigin::createUnique()); 4201 setSecurityOrigin(SecurityOrigin::createUnique());
4197 setContentSecurityPolicy(ContentSecurityPolicy::create(this)); 4202 setContentSecurityPolicy(ContentSecurityPolicy::create(this));
4198 return; 4203 return;
4199 } 4204 }
4200 4205
4201 // In the common case, create the security context from the currently 4206 // In the common case, create the security context from the currently
4202 // loading URL with a fresh content security policy. 4207 // loading URL with a fresh content security policy.
4203 m_cookieURL = m_url; 4208 m_cookieURL = m_url;
4204 enforceSandboxFlags(m_frame->loader()->effectiveSandboxFlags()); 4209 enforceSandboxFlags(initializer.sandboxFlags());
4205 setSecurityOrigin(isSandboxed(SandboxOrigin) ? SecurityOrigin::createUnique( ) : SecurityOrigin::create(m_url)); 4210 setSecurityOrigin(isSandboxed(SandboxOrigin) ? SecurityOrigin::createUnique( ) : SecurityOrigin::create(m_url));
4206 setContentSecurityPolicy(ContentSecurityPolicy::create(this)); 4211 setContentSecurityPolicy(ContentSecurityPolicy::create(this));
4207 4212
4208 if (Settings* settings = this->settings()) { 4213 if (Settings* settings = initializer.settings()) {
4209 if (!settings->webSecurityEnabled()) { 4214 if (!settings->webSecurityEnabled()) {
4210 // Web security is turned off. We should let this document access ev ery other document. This is used primary by testing 4215 // Web security is turned off. We should let this document access ev ery other document. This is used primary by testing
4211 // harnesses for web sites. 4216 // harnesses for web sites.
4212 securityOrigin()->grantUniversalAccess(); 4217 securityOrigin()->grantUniversalAccess();
4213 } else if (securityOrigin()->isLocal()) { 4218 } else if (securityOrigin()->isLocal()) {
4214 if (settings->allowUniversalAccessFromFileURLs()) { 4219 if (settings->allowUniversalAccessFromFileURLs()) {
4215 // Some clients want local URLs to have universal access, but th at setting is dangerous for other clients. 4220 // Some clients want local URLs to have universal access, but th at setting is dangerous for other clients.
4216 securityOrigin()->grantUniversalAccess(); 4221 securityOrigin()->grantUniversalAccess();
4217 } else if (!settings->allowFileAccessFromFileURLs()) { 4222 } else if (!settings->allowFileAccessFromFileURLs()) {
4218 // Some clients want local URLs to have even tighter restriction s by default, and not be able to access other local files. 4223 // Some clients want local URLs to have even tighter restriction s by default, and not be able to access other local files.
4219 // FIXME 81578: The naming of this is confusing. Files with rest ricted access to other local files 4224 // FIXME 81578: The naming of this is confusing. Files with rest ricted access to other local files
4220 // still can have other privileges that can be remembered, there by not making them unique origins. 4225 // still can have other privileges that can be remembered, there by not making them unique origins.
4221 securityOrigin()->enforceFilePathSeparation(); 4226 securityOrigin()->enforceFilePathSeparation();
4222 } 4227 }
4223 } 4228 }
4224 } 4229 }
4225 4230
4226 Document* parentDocument = ownerElement() ? ownerElement()->document() : 0; 4231 Document* parentDocument = ownerElement() ? ownerElement()->document() : 0;
4227 if (parentDocument && m_frame->loader()->shouldTreatURLAsSrcdocDocument(url( ))) { 4232 if (parentDocument && initializer.shouldTreatURLAsSrcdocDocument()) {
4228 m_isSrcdocDocument = true; 4233 m_isSrcdocDocument = true;
4229 setBaseURLOverride(parentDocument->baseURL()); 4234 setBaseURLOverride(parentDocument->baseURL());
4230 } 4235 }
4231 4236
4232 // FIXME: What happens if we inherit the security origin? This check may nee d to be later. 4237 // FIXME: What happens if we inherit the security origin? This check may nee d to be later.
4233 // <iframe seamless src="about:blank"> likely won't work as-is. 4238 // <iframe seamless src="about:blank"> likely won't work as-is.
4234 m_mayDisplaySeamlesslyWithParent = isEligibleForSeamless(parentDocument, thi s); 4239 m_mayDisplaySeamlesslyWithParent = isEligibleForSeamless(parentDocument, thi s);
4235 4240
4236 if (!shouldInheritSecurityOriginFromOwner(m_url)) 4241 if (!shouldInheritSecurityOriginFromOwner(m_url))
4237 return; 4242 return;
4238 4243
4239 // If we do not obtain a meaningful origin from the URL, then we try to 4244 // If we do not obtain a meaningful origin from the URL, then we try to
4240 // find one via the frame hierarchy. 4245 // find one via the frame hierarchy.
4241 4246
4242 Frame* ownerFrame = m_frame->tree()->parent(); 4247 Frame* ownerFrame = initializer.ownerFrame();
4243 if (!ownerFrame)
4244 ownerFrame = m_frame->loader()->opener();
4245
4246 if (!ownerFrame) { 4248 if (!ownerFrame) {
4247 didFailToInitializeSecurityOrigin(); 4249 didFailToInitializeSecurityOrigin();
4248 return; 4250 return;
4249 } 4251 }
4250 4252
4251 if (isSandboxed(SandboxOrigin)) { 4253 if (isSandboxed(SandboxOrigin)) {
4252 // If we're supposed to inherit our security origin from our owner, 4254 // If we're supposed to inherit our security origin from our owner,
4253 // but we're also sandboxed, the only thing we inherit is the ability 4255 // but we're also sandboxed, the only thing we inherit is the ability
4254 // to load local resources. This lets about:blank iframes in file:// 4256 // to load local resources. This lets about:blank iframes in file://
4255 // URL documents load images and other resources from the file system. 4257 // URL documents load images and other resources from the file system.
(...skipping 855 matching lines...) Expand 10 before | Expand all | Expand 10 after
5111 result.iterator->value = Locale::create(localeKey); 5113 result.iterator->value = Locale::create(localeKey);
5112 return *(result.iterator->value); 5114 return *(result.iterator->value);
5113 } 5115 }
5114 5116
5115 Document* Document::ensureTemplateDocument() 5117 Document* Document::ensureTemplateDocument()
5116 { 5118 {
5117 if (const Document* document = templateDocument()) 5119 if (const Document* document = templateDocument())
5118 return const_cast<Document*>(document); 5120 return const_cast<Document*>(document);
5119 5121
5120 if (isHTMLDocument()) 5122 if (isHTMLDocument())
5121 m_templateDocument = HTMLDocument::create(0, blankURL()); 5123 m_templateDocument = HTMLDocument::create(DocumentInitializer(blankURL() ));
5122 else 5124 else
5123 m_templateDocument = Document::create(0, blankURL()); 5125 m_templateDocument = Document::create(DocumentInitializer(blankURL()));
5124 5126
5125 m_templateDocument->setTemplateDocumentHost(this); // balanced in dtor. 5127 m_templateDocument->setTemplateDocumentHost(this); // balanced in dtor.
5126 5128
5127 return m_templateDocument.get(); 5129 return m_templateDocument.get();
5128 } 5130 }
5129 5131
5130 PassRefPtr<FontLoader> Document::fontloader() 5132 PassRefPtr<FontLoader> Document::fontloader()
5131 { 5133 {
5132 if (!m_fontloader) 5134 if (!m_fontloader)
5133 m_fontloader = FontLoader::create(this); 5135 m_fontloader = FontLoader::create(this);
(...skipping 26 matching lines...) Expand all
5160 { 5162 {
5161 return DocumentLifecycleNotifier::create(this); 5163 return DocumentLifecycleNotifier::create(this);
5162 } 5164 }
5163 5165
5164 DocumentLifecycleNotifier* Document::lifecycleNotifier() 5166 DocumentLifecycleNotifier* Document::lifecycleNotifier()
5165 { 5167 {
5166 return static_cast<DocumentLifecycleNotifier*>(ScriptExecutionContext::lifec ycleNotifier()); 5168 return static_cast<DocumentLifecycleNotifier*>(ScriptExecutionContext::lifec ycleNotifier());
5167 } 5169 }
5168 5170
5169 } // namespace WebCore 5171 } // namespace WebCore
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698