| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2006, 2007, 2008, 2010 Apple Inc. All rights reserved. | 2 * Copyright (C) 2006, 2007, 2008, 2010 Apple Inc. All rights reserved. |
| 3 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) | 3 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) |
| 4 * | 4 * |
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
| 7 * are met: | 7 * are met: |
| 8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
| (...skipping 340 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 351 // always detaches the previous Document first. Only XSLTProcessor | 351 // always detaches the previous Document first. Only XSLTProcessor |
| 352 // depends on this detach() call, so it seems like there's some room | 352 // depends on this detach() call, so it seems like there's some room |
| 353 // for cleanup. | 353 // for cleanup. |
| 354 m_document->detach(); | 354 m_document->detach(); |
| 355 } | 355 } |
| 356 | 356 |
| 357 // FIXME: This should be part of ActiveDOM Object shutdown | 357 // FIXME: This should be part of ActiveDOM Object shutdown |
| 358 clearEventQueue(); | 358 clearEventQueue(); |
| 359 | 359 |
| 360 m_document->clearDOMWindow(); | 360 m_document->clearDOMWindow(); |
| 361 m_document = 0; | 361 m_document = nullptr; |
| 362 } | 362 } |
| 363 | 363 |
| 364 void DOMWindow::clearEventQueue() | 364 void DOMWindow::clearEventQueue() |
| 365 { | 365 { |
| 366 if (!m_eventQueue) | 366 if (!m_eventQueue) |
| 367 return; | 367 return; |
| 368 m_eventQueue->close(); | 368 m_eventQueue->close(); |
| 369 m_eventQueue.clear(); | 369 m_eventQueue.clear(); |
| 370 } | 370 } |
| 371 | 371 |
| (...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 524 return m_document.get(); | 524 return m_document.get(); |
| 525 } | 525 } |
| 526 | 526 |
| 527 DOMWindow* DOMWindow::toDOMWindow() | 527 DOMWindow* DOMWindow::toDOMWindow() |
| 528 { | 528 { |
| 529 return this; | 529 return this; |
| 530 } | 530 } |
| 531 | 531 |
| 532 PassRefPtr<MediaQueryList> DOMWindow::matchMedia(const String& media) | 532 PassRefPtr<MediaQueryList> DOMWindow::matchMedia(const String& media) |
| 533 { | 533 { |
| 534 return document() ? document()->mediaQueryMatcher().matchMedia(media) : 0; | 534 return document() ? document()->mediaQueryMatcher().matchMedia(media) : null
ptr; |
| 535 } | 535 } |
| 536 | 536 |
| 537 Page* DOMWindow::page() | 537 Page* DOMWindow::page() |
| 538 { | 538 { |
| 539 return frame() ? frame()->page() : 0; | 539 return frame() ? frame()->page() : 0; |
| 540 } | 540 } |
| 541 | 541 |
| 542 void DOMWindow::frameDestroyed() | 542 void DOMWindow::frameDestroyed() |
| 543 { | 543 { |
| 544 FrameDestructionObserver::frameDestroyed(); | 544 FrameDestructionObserver::frameDestroyed(); |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 583 void DOMWindow::reset() | 583 void DOMWindow::reset() |
| 584 { | 584 { |
| 585 willDestroyDocumentInFrame(); | 585 willDestroyDocumentInFrame(); |
| 586 resetDOMWindowProperties(); | 586 resetDOMWindowProperties(); |
| 587 } | 587 } |
| 588 | 588 |
| 589 void DOMWindow::resetDOMWindowProperties() | 589 void DOMWindow::resetDOMWindowProperties() |
| 590 { | 590 { |
| 591 m_properties.clear(); | 591 m_properties.clear(); |
| 592 | 592 |
| 593 m_screen = 0; | 593 m_screen = nullptr; |
| 594 m_history = 0; | 594 m_history = nullptr; |
| 595 m_locationbar = 0; | 595 m_locationbar = nullptr; |
| 596 m_menubar = 0; | 596 m_menubar = nullptr; |
| 597 m_personalbar = 0; | 597 m_personalbar = nullptr; |
| 598 m_scrollbars = 0; | 598 m_scrollbars = nullptr; |
| 599 m_statusbar = 0; | 599 m_statusbar = nullptr; |
| 600 m_toolbar = 0; | 600 m_toolbar = nullptr; |
| 601 m_console = 0; | 601 m_console = nullptr; |
| 602 m_navigator = 0; | 602 m_navigator = nullptr; |
| 603 m_performance = 0; | 603 m_performance = nullptr; |
| 604 m_location = 0; | 604 m_location = nullptr; |
| 605 m_media = 0; | 605 m_media = nullptr; |
| 606 m_sessionStorage = 0; | 606 m_sessionStorage = nullptr; |
| 607 m_localStorage = 0; | 607 m_localStorage = nullptr; |
| 608 m_applicationCache = 0; | 608 m_applicationCache = nullptr; |
| 609 } | 609 } |
| 610 | 610 |
| 611 bool DOMWindow::isCurrentlyDisplayedInFrame() const | 611 bool DOMWindow::isCurrentlyDisplayedInFrame() const |
| 612 { | 612 { |
| 613 return m_frame && m_frame->domWindow() == this; | 613 return m_frame && m_frame->domWindow() == this; |
| 614 } | 614 } |
| 615 | 615 |
| 616 int DOMWindow::orientation() const | 616 int DOMWindow::orientation() const |
| 617 { | 617 { |
| 618 ASSERT(RuntimeEnabledFeatures::orientationEventEnabled()); | 618 ASSERT(RuntimeEnabledFeatures::orientationEventEnabled()); |
| (...skipping 688 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1307 } | 1307 } |
| 1308 | 1308 |
| 1309 Document* DOMWindow::document() const | 1309 Document* DOMWindow::document() const |
| 1310 { | 1310 { |
| 1311 return m_document.get(); | 1311 return m_document.get(); |
| 1312 } | 1312 } |
| 1313 | 1313 |
| 1314 PassRefPtr<StyleMedia> DOMWindow::styleMedia() const | 1314 PassRefPtr<StyleMedia> DOMWindow::styleMedia() const |
| 1315 { | 1315 { |
| 1316 if (!isCurrentlyDisplayedInFrame()) | 1316 if (!isCurrentlyDisplayedInFrame()) |
| 1317 return 0; | 1317 return nullptr; |
| 1318 if (!m_media) | 1318 if (!m_media) |
| 1319 m_media = StyleMedia::create(m_frame); | 1319 m_media = StyleMedia::create(m_frame); |
| 1320 return m_media.get(); | 1320 return m_media.get(); |
| 1321 } | 1321 } |
| 1322 | 1322 |
| 1323 PassRefPtr<CSSStyleDeclaration> DOMWindow::getComputedStyle(Element* elt, const
String& pseudoElt) const | 1323 PassRefPtr<CSSStyleDeclaration> DOMWindow::getComputedStyle(Element* elt, const
String& pseudoElt) const |
| 1324 { | 1324 { |
| 1325 if (!elt) | 1325 if (!elt) |
| 1326 return 0; | 1326 return nullptr; |
| 1327 | 1327 |
| 1328 return CSSComputedStyleDeclaration::create(elt, false, pseudoElt); | 1328 return CSSComputedStyleDeclaration::create(elt, false, pseudoElt); |
| 1329 } | 1329 } |
| 1330 | 1330 |
| 1331 PassRefPtr<CSSRuleList> DOMWindow::getMatchedCSSRules(Element* element, const St
ring& pseudoElement) const | 1331 PassRefPtr<CSSRuleList> DOMWindow::getMatchedCSSRules(Element* element, const St
ring& pseudoElement) const |
| 1332 { | 1332 { |
| 1333 UseCounter::count(document(), UseCounter::GetMatchedCSSRules); | 1333 UseCounter::count(document(), UseCounter::GetMatchedCSSRules); |
| 1334 if (!element) | 1334 if (!element) |
| 1335 return 0; | 1335 return nullptr; |
| 1336 | 1336 |
| 1337 if (!isCurrentlyDisplayedInFrame()) | 1337 if (!isCurrentlyDisplayedInFrame()) |
| 1338 return 0; | 1338 return nullptr; |
| 1339 | 1339 |
| 1340 unsigned colonStart = pseudoElement[0] == ':' ? (pseudoElement[1] == ':' ? 2
: 1) : 0; | 1340 unsigned colonStart = pseudoElement[0] == ':' ? (pseudoElement[1] == ':' ? 2
: 1) : 0; |
| 1341 CSSSelector::PseudoType pseudoType = CSSSelector::parsePseudoType(AtomicStri
ng(pseudoElement.substring(colonStart))); | 1341 CSSSelector::PseudoType pseudoType = CSSSelector::parsePseudoType(AtomicStri
ng(pseudoElement.substring(colonStart))); |
| 1342 if (pseudoType == CSSSelector::PseudoUnknown && !pseudoElement.isEmpty()) | 1342 if (pseudoType == CSSSelector::PseudoUnknown && !pseudoElement.isEmpty()) |
| 1343 return 0; | 1343 return nullptr; |
| 1344 | 1344 |
| 1345 unsigned rulesToInclude = StyleResolver::AuthorCSSRules; | 1345 unsigned rulesToInclude = StyleResolver::AuthorCSSRules; |
| 1346 PseudoId pseudoId = CSSSelector::pseudoId(pseudoType); | 1346 PseudoId pseudoId = CSSSelector::pseudoId(pseudoType); |
| 1347 return m_frame->document()->ensureStyleResolver().pseudoCSSRulesForElement(e
lement, pseudoId, rulesToInclude); | 1347 return m_frame->document()->ensureStyleResolver().pseudoCSSRulesForElement(e
lement, pseudoId, rulesToInclude); |
| 1348 } | 1348 } |
| 1349 | 1349 |
| 1350 PassRefPtr<DOMPoint> DOMWindow::webkitConvertPointFromNodeToPage(Node* node, con
st DOMPoint* p) const | 1350 PassRefPtr<DOMPoint> DOMWindow::webkitConvertPointFromNodeToPage(Node* node, con
st DOMPoint* p) const |
| 1351 { | 1351 { |
| 1352 if (!node || !p) | 1352 if (!node || !p) |
| 1353 return 0; | 1353 return nullptr; |
| 1354 | 1354 |
| 1355 if (!document()) | 1355 if (!document()) |
| 1356 return 0; | 1356 return nullptr; |
| 1357 | 1357 |
| 1358 document()->updateLayoutIgnorePendingStylesheets(); | 1358 document()->updateLayoutIgnorePendingStylesheets(); |
| 1359 | 1359 |
| 1360 FloatPoint pagePoint(p->x(), p->y()); | 1360 FloatPoint pagePoint(p->x(), p->y()); |
| 1361 pagePoint = node->convertToPage(pagePoint); | 1361 pagePoint = node->convertToPage(pagePoint); |
| 1362 return DOMPoint::create(pagePoint.x(), pagePoint.y()); | 1362 return DOMPoint::create(pagePoint.x(), pagePoint.y()); |
| 1363 } | 1363 } |
| 1364 | 1364 |
| 1365 PassRefPtr<DOMPoint> DOMWindow::webkitConvertPointFromPageToNode(Node* node, con
st DOMPoint* p) const | 1365 PassRefPtr<DOMPoint> DOMWindow::webkitConvertPointFromPageToNode(Node* node, con
st DOMPoint* p) const |
| 1366 { | 1366 { |
| 1367 if (!node || !p) | 1367 if (!node || !p) |
| 1368 return 0; | 1368 return nullptr; |
| 1369 | 1369 |
| 1370 if (!document()) | 1370 if (!document()) |
| 1371 return 0; | 1371 return nullptr; |
| 1372 | 1372 |
| 1373 document()->updateLayoutIgnorePendingStylesheets(); | 1373 document()->updateLayoutIgnorePendingStylesheets(); |
| 1374 | 1374 |
| 1375 FloatPoint nodePoint(p->x(), p->y()); | 1375 FloatPoint nodePoint(p->x(), p->y()); |
| 1376 nodePoint = node->convertFromPage(nodePoint); | 1376 nodePoint = node->convertFromPage(nodePoint); |
| 1377 return DOMPoint::create(nodePoint.x(), nodePoint.y()); | 1377 return DOMPoint::create(nodePoint.x(), nodePoint.y()); |
| 1378 } | 1378 } |
| 1379 | 1379 |
| 1380 double DOMWindow::devicePixelRatio() const | 1380 double DOMWindow::devicePixelRatio() const |
| 1381 { | 1381 { |
| (...skipping 404 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1786 } | 1786 } |
| 1787 | 1787 |
| 1788 printErrorMessage(crossDomainAccessErrorMessage(callingWindow)); | 1788 printErrorMessage(crossDomainAccessErrorMessage(callingWindow)); |
| 1789 return true; | 1789 return true; |
| 1790 } | 1790 } |
| 1791 | 1791 |
| 1792 PassRefPtr<DOMWindow> DOMWindow::open(const String& urlString, const AtomicStrin
g& frameName, const String& windowFeaturesString, | 1792 PassRefPtr<DOMWindow> DOMWindow::open(const String& urlString, const AtomicStrin
g& frameName, const String& windowFeaturesString, |
| 1793 DOMWindow* callingWindow, DOMWindow* enteredWindow) | 1793 DOMWindow* callingWindow, DOMWindow* enteredWindow) |
| 1794 { | 1794 { |
| 1795 if (!isCurrentlyDisplayedInFrame()) | 1795 if (!isCurrentlyDisplayedInFrame()) |
| 1796 return 0; | 1796 return nullptr; |
| 1797 Document* activeDocument = callingWindow->document(); | 1797 Document* activeDocument = callingWindow->document(); |
| 1798 if (!activeDocument) | 1798 if (!activeDocument) |
| 1799 return 0; | 1799 return nullptr; |
| 1800 Frame* firstFrame = enteredWindow->frame(); | 1800 Frame* firstFrame = enteredWindow->frame(); |
| 1801 if (!firstFrame) | 1801 if (!firstFrame) |
| 1802 return 0; | 1802 return nullptr; |
| 1803 | 1803 |
| 1804 if (!enteredWindow->allowPopUp()) { | 1804 if (!enteredWindow->allowPopUp()) { |
| 1805 // Because FrameTree::find() returns true for empty strings, we must che
ck for empty frame names. | 1805 // Because FrameTree::find() returns true for empty strings, we must che
ck for empty frame names. |
| 1806 // Otherwise, illegitimate window.open() calls with no name will pass ri
ght through the popup blocker. | 1806 // Otherwise, illegitimate window.open() calls with no name will pass ri
ght through the popup blocker. |
| 1807 if (frameName.isEmpty() || !m_frame->tree().find(frameName)) | 1807 if (frameName.isEmpty() || !m_frame->tree().find(frameName)) |
| 1808 return 0; | 1808 return nullptr; |
| 1809 } | 1809 } |
| 1810 | 1810 |
| 1811 // Get the target frame for the special cases of _top and _parent. | 1811 // Get the target frame for the special cases of _top and _parent. |
| 1812 // In those cases, we schedule a location change right now and return early. | 1812 // In those cases, we schedule a location change right now and return early. |
| 1813 Frame* targetFrame = 0; | 1813 Frame* targetFrame = 0; |
| 1814 if (frameName == "_top") | 1814 if (frameName == "_top") |
| 1815 targetFrame = m_frame->tree().top(); | 1815 targetFrame = m_frame->tree().top(); |
| 1816 else if (frameName == "_parent") { | 1816 else if (frameName == "_parent") { |
| 1817 if (Frame* parent = m_frame->tree().parent()) | 1817 if (Frame* parent = m_frame->tree().parent()) |
| 1818 targetFrame = parent; | 1818 targetFrame = parent; |
| 1819 else | 1819 else |
| 1820 targetFrame = m_frame; | 1820 targetFrame = m_frame; |
| 1821 } | 1821 } |
| 1822 if (targetFrame) { | 1822 if (targetFrame) { |
| 1823 if (!activeDocument->canNavigate(targetFrame)) | 1823 if (!activeDocument->canNavigate(targetFrame)) |
| 1824 return 0; | 1824 return nullptr; |
| 1825 | 1825 |
| 1826 KURL completedURL = firstFrame->document()->completeURL(urlString); | 1826 KURL completedURL = firstFrame->document()->completeURL(urlString); |
| 1827 | 1827 |
| 1828 if (targetFrame->domWindow()->isInsecureScriptAccess(callingWindow, comp
letedURL)) | 1828 if (targetFrame->domWindow()->isInsecureScriptAccess(callingWindow, comp
letedURL)) |
| 1829 return targetFrame->domWindow(); | 1829 return targetFrame->domWindow(); |
| 1830 | 1830 |
| 1831 if (urlString.isEmpty()) | 1831 if (urlString.isEmpty()) |
| 1832 return targetFrame->domWindow(); | 1832 return targetFrame->domWindow(); |
| 1833 | 1833 |
| 1834 // For whatever reason, Firefox uses the first window rather than the ac
tive window to | 1834 // For whatever reason, Firefox uses the first window rather than the ac
tive window to |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1890 return static_cast<DOMWindowLifecycleNotifier&>(LifecycleContext<DOMWindow>:
:lifecycleNotifier()); | 1890 return static_cast<DOMWindowLifecycleNotifier&>(LifecycleContext<DOMWindow>:
:lifecycleNotifier()); |
| 1891 } | 1891 } |
| 1892 | 1892 |
| 1893 PassOwnPtr<LifecycleNotifier<DOMWindow> > DOMWindow::createLifecycleNotifier() | 1893 PassOwnPtr<LifecycleNotifier<DOMWindow> > DOMWindow::createLifecycleNotifier() |
| 1894 { | 1894 { |
| 1895 return DOMWindowLifecycleNotifier::create(this); | 1895 return DOMWindowLifecycleNotifier::create(this); |
| 1896 } | 1896 } |
| 1897 | 1897 |
| 1898 | 1898 |
| 1899 } // namespace WebCore | 1899 } // namespace WebCore |
| OLD | NEW |