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

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

Issue 14248006: A focused element should lose focus when it becomes unfocusable. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: add a FIXME comment Created 7 years, 7 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
« no previous file with comments | « Source/core/dom/Document.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 352 matching lines...) Expand 10 before | Expand all | Expand 10 after
363 static void printNavigationErrorMessage(Frame* frame, const KURL& activeURL, con st char* reason) 363 static void printNavigationErrorMessage(Frame* frame, const KURL& activeURL, con st char* reason)
364 { 364 {
365 String message = "Unsafe JavaScript attempt to initiate navigation for frame with URL '" + frame->document()->url().string() + "' from frame with URL '" + a ctiveURL.string() + "'. " + reason + "\n"; 365 String message = "Unsafe JavaScript attempt to initiate navigation for frame with URL '" + frame->document()->url().string() + "' from frame with URL '" + a ctiveURL.string() + "'. " + reason + "\n";
366 366
367 // FIXME: should we print to the console of the document performing the navi gation instead? 367 // FIXME: should we print to the console of the document performing the navi gation instead?
368 frame->document()->domWindow()->printErrorMessage(message); 368 frame->document()->domWindow()->printErrorMessage(message);
369 } 369 }
370 370
371 uint64_t Document::s_globalTreeVersion = 0; 371 uint64_t Document::s_globalTreeVersion = 0;
372 372
373 // This class should be passed only to Document::postTask.
374 class CheckFocusedNodeTask FINAL : public ScriptExecutionContext::Task {
375 public:
376 static PassOwnPtr<CheckFocusedNodeTask> create()
377 {
378 return adoptPtr(new CheckFocusedNodeTask());
379 }
380 virtual ~CheckFocusedNodeTask() { }
381
382 private:
383 CheckFocusedNodeTask() { }
384 virtual void performTask(ScriptExecutionContext* context) OVERRIDE
385 {
386 ASSERT(context->isDocument());
387 Document* document = toDocument(context);
388 document->didRunCheckFocusedNodeTask();
389 if (!document->focusedNode())
390 return;
391 if (document->focusedNode()->renderer() && document->focusedNode()->rend erer()->needsLayout())
392 return;
393 if (!document->focusedNode()->isFocusable())
394 document->setFocusedNode(0);
395 }
396 };
397
373 Document::Document(Frame* frame, const KURL& url, DocumentClassFlags documentCla sses) 398 Document::Document(Frame* frame, const KURL& url, DocumentClassFlags documentCla sses)
374 : ContainerNode(0, CreateDocument) 399 : ContainerNode(0, CreateDocument)
375 , TreeScope(this) 400 , TreeScope(this)
376 , m_styleResolverThrowawayTimer(this, &Document::styleResolverThrowawayTimer Fired) 401 , m_styleResolverThrowawayTimer(this, &Document::styleResolverThrowawayTimer Fired)
377 , m_lastStyleResolverAccessTime(0) 402 , m_lastStyleResolverAccessTime(0)
378 , m_activeParserCount(0) 403 , m_activeParserCount(0)
379 , m_contextFeatures(ContextFeatures::defaultSwitch()) 404 , m_contextFeatures(ContextFeatures::defaultSwitch())
380 , m_compatibilityMode(NoQuirksMode) 405 , m_compatibilityMode(NoQuirksMode)
381 , m_compatibilityModeLocked(false) 406 , m_compatibilityModeLocked(false)
407 , m_didPostCheckFocusedNodeTask(false)
382 , m_domTreeVersion(++s_globalTreeVersion) 408 , m_domTreeVersion(++s_globalTreeVersion)
383 , m_mutationObserverTypes(0) 409 , m_mutationObserverTypes(0)
384 , m_styleSheetCollection(DocumentStyleSheetCollection::create(this)) 410 , m_styleSheetCollection(DocumentStyleSheetCollection::create(this))
385 , m_visitedLinkState(VisitedLinkState::create(this)) 411 , m_visitedLinkState(VisitedLinkState::create(this))
386 , m_readyState(Complete) 412 , m_readyState(Complete)
387 , m_styleRecalcTimer(this, &Document::styleRecalcTimerFired) 413 , m_styleRecalcTimer(this, &Document::styleRecalcTimerFired)
388 , m_pendingStyleRecalcShouldForce(false) 414 , m_pendingStyleRecalcShouldForce(false)
389 , m_frameElementsShouldIgnoreScrolling(false) 415 , m_frameElementsShouldIgnoreScrolling(false)
390 , m_containsValidityStyleRules(false) 416 , m_containsValidityStyleRules(false)
391 , m_updateFocusAppearanceRestoresSelection(false) 417 , m_updateFocusAppearanceRestoresSelection(false)
(...skipping 1308 matching lines...) Expand 10 before | Expand all | Expand 10 after
1700 if (Element* oe = ownerElement()) 1726 if (Element* oe = ownerElement())
1701 oe->document()->updateLayout(); 1727 oe->document()->updateLayout();
1702 1728
1703 updateStyleIfNeeded(); 1729 updateStyleIfNeeded();
1704 1730
1705 StackStats::LayoutCheckPoint layoutCheckPoint; 1731 StackStats::LayoutCheckPoint layoutCheckPoint;
1706 1732
1707 // Only do a layout if changes have occurred that make it necessary. 1733 // Only do a layout if changes have occurred that make it necessary.
1708 if (frameView && renderer() && (frameView->layoutPending() || renderer()->ne edsLayout())) 1734 if (frameView && renderer() && (frameView->layoutPending() || renderer()->ne edsLayout()))
1709 frameView->layout(); 1735 frameView->layout();
1736
1737 // FIXME: Using a Task doesn't look a good idea.
1738 if (m_focusedNode && !m_didPostCheckFocusedNodeTask) {
1739 postTask(CheckFocusedNodeTask::create());
1740 m_didPostCheckFocusedNodeTask = true;
1741 }
1710 } 1742 }
1711 1743
1712 // FIXME: This is a bad idea and needs to be removed eventually. 1744 // FIXME: This is a bad idea and needs to be removed eventually.
1713 // Other browsers load stylesheets before they continue parsing the web page. 1745 // Other browsers load stylesheets before they continue parsing the web page.
1714 // Since we don't, we can run JavaScript code that needs answers before the 1746 // Since we don't, we can run JavaScript code that needs answers before the
1715 // stylesheets are loaded. Doing a layout ignoring the pending stylesheets 1747 // stylesheets are loaded. Doing a layout ignoring the pending stylesheets
1716 // lets us get reasonable answers. The long term solution to this problem is 1748 // lets us get reasonable answers. The long term solution to this problem is
1717 // to instead suspend JavaScript execution. 1749 // to instead suspend JavaScript execution.
1718 void Document::updateLayoutIgnorePendingStylesheets() 1750 void Document::updateLayoutIgnorePendingStylesheets()
1719 { 1751 {
(...skipping 3868 matching lines...) Expand 10 before | Expand all | Expand 10 after
5588 return; 5620 return;
5589 5621
5590 Vector<RefPtr<Element> > associatedFormControls; 5622 Vector<RefPtr<Element> > associatedFormControls;
5591 copyToVector(m_associatedFormControls, associatedFormControls); 5623 copyToVector(m_associatedFormControls, associatedFormControls);
5592 5624
5593 frame()->page()->chrome()->client()->didAssociateFormControls(associatedForm Controls); 5625 frame()->page()->chrome()->client()->didAssociateFormControls(associatedForm Controls);
5594 m_associatedFormControls.clear(); 5626 m_associatedFormControls.clear();
5595 } 5627 }
5596 5628
5597 } // namespace WebCore 5629 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/core/dom/Document.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698