LEFT | RIGHT |
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-2018 Apple Inc. All rights reserved. | 6 * Copyright (C) 2004-2018 Apple Inc. All rights 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 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
147 #include "PlatformStrategies.h" | 147 #include "PlatformStrategies.h" |
148 #include "PlugInsResources.h" | 148 #include "PlugInsResources.h" |
149 #include "PluginDocument.h" | 149 #include "PluginDocument.h" |
150 #include "PointerLockController.h" | 150 #include "PointerLockController.h" |
151 #include "PolicyChecker.h" | 151 #include "PolicyChecker.h" |
152 #include "PopStateEvent.h" | 152 #include "PopStateEvent.h" |
153 #include "ProcessingInstruction.h" | 153 #include "ProcessingInstruction.h" |
154 #include "PublicSuffix.h" | 154 #include "PublicSuffix.h" |
155 #include "RealtimeMediaSourceCenter.h" | 155 #include "RealtimeMediaSourceCenter.h" |
156 #include "RenderChildIterator.h" | 156 #include "RenderChildIterator.h" |
| 157 #include "RenderInline.h" |
157 #include "RenderLayerCompositor.h" | 158 #include "RenderLayerCompositor.h" |
| 159 #include "RenderLineBreak.h" |
158 #include "RenderTreeUpdater.h" | 160 #include "RenderTreeUpdater.h" |
159 #include "RenderView.h" | 161 #include "RenderView.h" |
160 #include "RenderWidget.h" | 162 #include "RenderWidget.h" |
161 #include "RequestAnimationFrameCallback.h" | 163 #include "RequestAnimationFrameCallback.h" |
162 #include "ResourceLoadObserver.h" | 164 #include "ResourceLoadObserver.h" |
163 #include "RuntimeApplicationChecks.h" | 165 #include "RuntimeApplicationChecks.h" |
164 #include "RuntimeEnabledFeatures.h" | 166 #include "RuntimeEnabledFeatures.h" |
165 #include "SVGDocumentExtensions.h" | 167 #include "SVGDocumentExtensions.h" |
166 #include "SVGElement.h" | 168 #include "SVGElement.h" |
167 #include "SVGElementFactory.h" | 169 #include "SVGElementFactory.h" |
(...skipping 1185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1353 { | 1355 { |
1354 if (!XMLDocumentParser::supportsXMLVersion(version)) | 1356 if (!XMLDocumentParser::supportsXMLVersion(version)) |
1355 return Exception { NotSupportedError }; | 1357 return Exception { NotSupportedError }; |
1356 | 1358 |
1357 m_xmlVersion = version; | 1359 m_xmlVersion = version; |
1358 return { }; | 1360 return { }; |
1359 } | 1361 } |
1360 | 1362 |
1361 void Document::setXMLStandalone(bool standalone) | 1363 void Document::setXMLStandalone(bool standalone) |
1362 { | 1364 { |
1363 m_xmlStandalone = standalone ? Standalone : NotStandalone; | 1365 m_xmlStandalone = standalone ? StandaloneStatus::Standalone : StandaloneStat
us::NotStandalone; |
1364 } | 1366 } |
1365 | 1367 |
1366 void Document::setDocumentURI(const String& uri) | 1368 void Document::setDocumentURI(const String& uri) |
1367 { | 1369 { |
1368 // This property is read-only from JavaScript, but writable from Objective-C
. | 1370 // This property is read-only from JavaScript, but writable from Objective-C
. |
1369 m_documentURI = uri; | 1371 m_documentURI = uri; |
1370 updateBaseURL(); | 1372 updateBaseURL(); |
1371 } | 1373 } |
1372 | 1374 |
1373 void Document::setContent(const String& content) | 1375 void Document::setContent(const String& content) |
(...skipping 1238 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2612 { | 2614 { |
2613 if (!m_domWindow) | 2615 if (!m_domWindow) |
2614 return Exception { InvalidAccessError }; | 2616 return Exception { InvalidAccessError }; |
2615 | 2617 |
2616 return m_domWindow->open(activeWindow, firstWindow, url, name, features); | 2618 return m_domWindow->open(activeWindow, firstWindow, url, name, features); |
2617 } | 2619 } |
2618 | 2620 |
2619 // FIXME: Add support for the 'type' and 'replace' parameters. | 2621 // FIXME: Add support for the 'type' and 'replace' parameters. |
2620 ExceptionOr<Document&> Document::openForBindings(Document* responsibleDocument,
const String&, const String&) | 2622 ExceptionOr<Document&> Document::openForBindings(Document* responsibleDocument,
const String&, const String&) |
2621 { | 2623 { |
2622 if (!isHTMLDocument()) | 2624 if (!isHTMLDocument() || m_throwOnDynamicMarkupInsertionCount) |
2623 return Exception { InvalidStateError }; | 2625 return Exception { InvalidStateError }; |
2624 | |
2625 // FIXME: This should also throw if "document's throw-on-dynamic-markup-inse
rtion counter is greater than 0". | |
2626 // https://bugs.webkit.org/show_bug.cgi?id=187319 | |
2627 | 2626 |
2628 open(responsibleDocument); | 2627 open(responsibleDocument); |
2629 return *this; | 2628 return *this; |
2630 } | 2629 } |
2631 | 2630 |
2632 void Document::open(Document* responsibleDocument) | 2631 void Document::open(Document* responsibleDocument) |
2633 { | 2632 { |
2634 if (m_ignoreOpensDuringUnloadCount) | 2633 if (m_ignoreOpensDuringUnloadCount) |
2635 return; | 2634 return; |
2636 | 2635 |
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2756 if (auto element = documentElement()) | 2755 if (auto element = documentElement()) |
2757 return childrenOfType<HTMLHeadElement>(*element).first(); | 2756 return childrenOfType<HTMLHeadElement>(*element).first(); |
2758 return nullptr; | 2757 return nullptr; |
2759 } | 2758 } |
2760 | 2759 |
2761 ExceptionOr<void> Document::closeForBindings() | 2760 ExceptionOr<void> Document::closeForBindings() |
2762 { | 2761 { |
2763 // FIXME: We should follow the specification more closely: | 2762 // FIXME: We should follow the specification more closely: |
2764 // http://www.whatwg.org/specs/web-apps/current-work/#dom-document-cl
ose | 2763 // http://www.whatwg.org/specs/web-apps/current-work/#dom-document-cl
ose |
2765 | 2764 |
2766 if (!isHTMLDocument()) | 2765 if (!isHTMLDocument() || m_throwOnDynamicMarkupInsertionCount) |
2767 return Exception { InvalidStateError }; | 2766 return Exception { InvalidStateError }; |
2768 | |
2769 // FIXME: This should also throw if "document's throw-on-dynamic-markup-inse
rtion counter is greater than 0". | |
2770 // https://bugs.webkit.org/show_bug.cgi?id=187319 | |
2771 | 2767 |
2772 close(); | 2768 close(); |
2773 return { }; | 2769 return { }; |
2774 } | 2770 } |
2775 | 2771 |
2776 void Document::close() | 2772 void Document::close() |
2777 { | 2773 { |
2778 if (!scriptableDocumentParser() || !scriptableDocumentParser()->wasCreatedBy
Script() || !scriptableDocumentParser()->isParsing()) | 2774 if (!scriptableDocumentParser() || !scriptableDocumentParser()->wasCreatedBy
Script() || !scriptableDocumentParser()->isParsing()) |
2779 return; | 2775 return; |
2780 | 2776 |
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2987 | 2983 |
2988 if (!hasInsertionPoint) | 2984 if (!hasInsertionPoint) |
2989 open(responsibleDocument); | 2985 open(responsibleDocument); |
2990 | 2986 |
2991 ASSERT(m_parser); | 2987 ASSERT(m_parser); |
2992 m_parser->insert(WTFMove(text)); | 2988 m_parser->insert(WTFMove(text)); |
2993 } | 2989 } |
2994 | 2990 |
2995 ExceptionOr<void> Document::write(Document* responsibleDocument, Vector<String>&
& strings) | 2991 ExceptionOr<void> Document::write(Document* responsibleDocument, Vector<String>&
& strings) |
2996 { | 2992 { |
2997 if (!isHTMLDocument()) | 2993 if (!isHTMLDocument() || m_throwOnDynamicMarkupInsertionCount) |
2998 return Exception { InvalidStateError }; | 2994 return Exception { InvalidStateError }; |
2999 | |
3000 // FIXME: This should also throw if "document's throw-on-dynamic-markup-inse
rtion counter is greater than 0". | |
3001 // https://bugs.webkit.org/show_bug.cgi?id=187319 | |
3002 | 2995 |
3003 SegmentedString text; | 2996 SegmentedString text; |
3004 for (auto& string : strings) | 2997 for (auto& string : strings) |
3005 text.append(WTFMove(string)); | 2998 text.append(WTFMove(string)); |
3006 | 2999 |
3007 write(responsibleDocument, WTFMove(text)); | 3000 write(responsibleDocument, WTFMove(text)); |
3008 | 3001 |
3009 return { }; | 3002 return { }; |
3010 } | 3003 } |
3011 | 3004 |
3012 ExceptionOr<void> Document::writeln(Document* responsibleDocument, Vector<String
>&& strings) | 3005 ExceptionOr<void> Document::writeln(Document* responsibleDocument, Vector<String
>&& strings) |
3013 { | 3006 { |
3014 if (!isHTMLDocument()) | 3007 if (!isHTMLDocument() || m_throwOnDynamicMarkupInsertionCount) |
3015 return Exception { InvalidStateError }; | 3008 return Exception { InvalidStateError }; |
3016 | |
3017 // FIXME: This should also throw if "document's throw-on-dynamic-markup-inse
rtion counter is greater than 0". | |
3018 // https://bugs.webkit.org/show_bug.cgi?id=187319 | |
3019 | 3009 |
3020 SegmentedString text; | 3010 SegmentedString text; |
3021 for (auto& string : strings) | 3011 for (auto& string : strings) |
3022 text.append(WTFMove(string)); | 3012 text.append(WTFMove(string)); |
3023 | 3013 |
3024 text.append("\n"_s); | 3014 text.append("\n"_s); |
3025 write(responsibleDocument, WTFMove(text)); | 3015 write(responsibleDocument, WTFMove(text)); |
3026 | 3016 |
3027 return { }; | 3017 return { }; |
3028 } | 3018 } |
(...skipping 4406 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7435 m_viewportDependentPictures.remove(&picture); | 7425 m_viewportDependentPictures.remove(&picture); |
7436 } | 7426 } |
7437 | 7427 |
7438 #if ENABLE(INTERSECTION_OBSERVER) | 7428 #if ENABLE(INTERSECTION_OBSERVER) |
7439 | 7429 |
7440 void Document::activateIntersectionObserver(IntersectionObserver& observer) | 7430 void Document::activateIntersectionObserver(IntersectionObserver& observer) |
7441 { | 7431 { |
7442 m_activeIntersectionObservers.add(&observer); | 7432 m_activeIntersectionObservers.add(&observer); |
7443 } | 7433 } |
7444 | 7434 |
7445 void Document::deactivateIntersectionObserver(IntersectionObserver& observer) | 7435 bool Document::deactivateIntersectionObserver(IntersectionObserver& observer) |
7446 { | 7436 { |
7447 m_activeIntersectionObservers.remove(&observer); | 7437 return m_activeIntersectionObservers.remove(&observer); |
7448 } | 7438 } |
7449 | 7439 |
7450 void Document::addViewportIntersectionObserver(IntersectionObserver& observer) | 7440 void Document::addViewportIntersectionObserver(IntersectionObserver& observer) |
7451 { | 7441 { |
7452 m_viewportIntersectionObservers.add(&observer); | 7442 m_viewportIntersectionObservers.add(&observer); |
7453 } | 7443 } |
7454 | 7444 |
7455 void Document::removeViewportIntersectionObserver(IntersectionObserver& observer
) | 7445 void Document::removeViewportIntersectionObserver(IntersectionObserver& observer
) |
7456 { | 7446 { |
7457 m_viewportIntersectionObservers.remove(&observer); | 7447 m_viewportIntersectionObservers.remove(&observer); |
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7579 ASSERT(frameView.frame().isMainFrame()); | 7569 ASSERT(frameView.frame().isMainFrame()); |
7580 FloatRect unclippedRootBounds = frameView.layoutViewportRect(); | 7570 FloatRect unclippedRootBounds = frameView.layoutViewportRect(); |
7581 unclippedRootBounds.move(-rootMarginBoxExtent.left(), -rootMarginBoxExte
nt.top()); | 7571 unclippedRootBounds.move(-rootMarginBoxExtent.left(), -rootMarginBoxExte
nt.top()); |
7582 unclippedRootBounds.expand(rootMarginBoxExtent.left() + rootMarginBoxExt
ent.right(), rootMarginBoxExtent.top() + rootMarginBoxExtent.bottom()); | 7572 unclippedRootBounds.expand(rootMarginBoxExtent.left() + rootMarginBoxExt
ent.right(), rootMarginBoxExtent.top() + rootMarginBoxExtent.bottom()); |
7583 absRootBounds = frameView.renderView()->localToAbsoluteQuad(unclippedRoo
tBounds).boundingBox(); | 7573 absRootBounds = frameView.renderView()->localToAbsoluteQuad(unclippedRoo
tBounds).boundingBox(); |
7584 } | 7574 } |
7585 | 7575 |
7586 // 1. Let intersectionRect be the result of running the getBoundingClientRec
t() algorithm on the target. | 7576 // 1. Let intersectionRect be the result of running the getBoundingClientRec
t() algorithm on the target. |
7587 // This gets targetBounds in target-local coordinates. | 7577 // This gets targetBounds in target-local coordinates. |
7588 LayoutRect targetBounds; | 7578 LayoutRect targetBounds; |
7589 if (is<RenderBoxModelObject>(rendererForTarget)) | 7579 if (is<RenderBox>(rendererForTarget)) |
7590 targetBounds = downcast<RenderBoxModelObject>(rendererForTarget).borderB
oundingBox(); | 7580 targetBounds = downcast<RenderBox>(rendererForTarget).borderBoundingBox(
); |
| 7581 else if (is<RenderInline>(rendererForTarget)) |
| 7582 targetBounds = downcast<RenderInline>(rendererForTarget).linesBoundingBo
x(); |
| 7583 else if (is<RenderLineBreak>(rendererForTarget)) |
| 7584 targetBounds = downcast<RenderLineBreak>(rendererForTarget).linesBoundin
gBox(); |
7591 else if (rendererForTarget.element() && rendererForTarget.element()->isSVGEl
ement()) { | 7585 else if (rendererForTarget.element() && rendererForTarget.element()->isSVGEl
ement()) { |
7592 // Get the bounding rectangle from the SVG model. | 7586 // Get the bounding rectangle from the SVG model. |
7593 SVGElement& svgElement = downcast<SVGElement>(*rendererForTarget.element
()); | 7587 SVGElement& svgElement = downcast<SVGElement>(*rendererForTarget.element
()); |
7594 FloatRect localRect; | 7588 FloatRect localRect; |
7595 if (svgElement.getBoundingBox(localRect)) | 7589 if (svgElement.getBoundingBox(localRect)) |
7596 targetBounds = LayoutRect(localRect); | 7590 targetBounds = LayoutRect(localRect); |
7597 } | 7591 } |
7598 | 7592 |
7599 absTargetRect = rendererForTarget.localToAbsoluteQuad(FloatRect(targetBounds
)).boundingBox(); | 7593 absTargetRect = rendererForTarget.localToAbsoluteQuad(FloatRect(targetBounds
)).boundingBox(); |
7600 | 7594 |
7601 // 2-3. Map to coordinateRoot, clipping along the way. | 7595 // 2-3. Map to coordinateRoot, clipping along the way. |
7602 // FIXME: clippedOverflowRectForRepaint() may do some things we don't want. | 7596 // FIXME: clippedOverflowRectForRepaint() may do some things we don't want. |
7603 // 4. Map intersectionRect to the coordinate space of the intersection root. | 7597 // 4. Map intersectionRect to the coordinate space of the intersection root. |
7604 isIntersecting = true; | 7598 isIntersecting = true; |
7605 FloatRect intersectionRect = rendererForTarget.computeRectForRepaint(targetB
ounds, coordinateRoot, {false /* hasPositionFixedDescendant */, false /* dirtyRe
ctIsFlipped */, true /* useInclusiveIntersection */, &isIntersecting}); | 7599 FloatRect intersectionRect = rendererForTarget.computeRectForRepaint(targetB
ounds, coordinateRoot, {false /* hasPositionFixedDescendant */, false /* dirtyRe
ctIsFlipped */, true /* useInclusiveIntersection */, &isIntersecting}); |
7606 | 7600 |
7607 LOG_WITH_STREAM(IntersectionObserver, stream << " target in root space " <<
intersectionRect << " root bounds " << rootBounds); | 7601 LOG_WITH_STREAM(IntersectionObserver, stream << " target in root space " <<
intersectionRect << " root bounds " << rootBounds); |
7608 | 7602 |
7609 if (isIntersecting) { | 7603 if (isIntersecting) { |
7610 // 5. Update intersectionRect by intersecting it with the root intersect
ion rectangle. | 7604 // 5. Update intersectionRect by intersecting it with the root intersect
ion rectangle. |
7611 isIntersecting = intersectionRect.inclusiveIntersect(rootBounds); | 7605 isIntersecting = intersectionRect.inclusiveIntersect(rootBounds); |
7612 } | 7606 |
7613 | |
7614 if (isIntersecting) { | |
7615 // 6. Map intersectionRect to the coordinate space of the viewport of th
e Document containing the target. | 7607 // 6. Map intersectionRect to the coordinate space of the viewport of th
e Document containing the target. |
7616 // We'll use absolute coordinates instead. | 7608 // We'll use absolute coordinates instead. |
7617 absIntersectionRect = coordinateRoot->localToAbsoluteQuad(intersectionRe
ct).boundingBox(); | 7609 absIntersectionRect = coordinateRoot->localToAbsoluteQuad(intersectionRe
ct).boundingBox(); |
7618 } | 7610 } |
7619 return true; | 7611 return true; |
7620 } | 7612 } |
7621 | 7613 |
7622 bool Document::updateIntersectionObservation(IntersectionObserver& observer, dou
ble timeStamp) | 7614 bool Document::updateIntersectionObservation(IntersectionObserver& observer, dou
ble timeStamp) |
7623 { | 7615 { |
7624 FrameView* frameView = view(); | 7616 FrameView* frameView = view(); |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7668 break; | 7660 break; |
7669 } | 7661 } |
7670 } | 7662 } |
7671 if (!setIndex) | 7663 if (!setIndex) |
7672 thresholdIndex = observer.thresholds().size(); | 7664 thresholdIndex = observer.thresholds().size(); |
7673 } | 7665 } |
7674 | 7666 |
7675 // 9. Let intersectionObserverRegistration be the IntersectionObserverRe
gistration record in | 7667 // 9. Let intersectionObserverRegistration be the IntersectionObserverRe
gistration record in |
7676 // target's internal [[RegisteredIntersectionObservers]] slot whose obse
rver property is equal to observer. | 7668 // target's internal [[RegisteredIntersectionObservers]] slot whose obse
rver property is equal to observer. |
7677 IntersectionObserverRegistration* registration = nullptr; | 7669 IntersectionObserverRegistration* registration = nullptr; |
7678 auto registrations = target->intersectionObserverRegistrations(); | 7670 auto* observerData = target->intersectionObserverData(); |
7679 if (registrations) { | 7671 if (observerData) { |
7680 for (auto& currRegistration : *registrations) { | 7672 auto& registrations = observerData->registrations; |
| 7673 for (auto& currRegistration : registrations) { |
7681 if (currRegistration.observer == &observer) { | 7674 if (currRegistration.observer == &observer) { |
7682 registration = &currRegistration; | 7675 registration = &currRegistration; |
7683 break; | 7676 break; |
7684 } | 7677 } |
7685 } | 7678 } |
7686 } | 7679 } |
7687 | 7680 |
7688 if (!registration) { | 7681 if (!registration) { |
7689 ASSERT_NOT_REACHED(); | 7682 ASSERT_NOT_REACHED(); |
7690 continue; | 7683 continue; |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7729 } | 7722 } |
7730 | 7723 |
7731 std::optional<DOMRectInit> entryRootBounds; | 7724 std::optional<DOMRectInit> entryRootBounds; |
7732 if (shouldReportRootBounds) | 7725 if (shouldReportRootBounds) |
7733 entryRootBounds = DOMRectInit({ rootBounds.x(), rootBounds.y(),
rootBounds.width(), rootBounds.height() }); | 7726 entryRootBounds = DOMRectInit({ rootBounds.x(), rootBounds.y(),
rootBounds.width(), rootBounds.height() }); |
7734 observer.appendQueuedEntry(IntersectionObserverEntry::create({ | 7727 observer.appendQueuedEntry(IntersectionObserverEntry::create({ |
7735 timeStamp, | 7728 timeStamp, |
7736 entryRootBounds, | 7729 entryRootBounds, |
7737 { targetClientRect.x(), targetClientRect.y(), targetClientRect.w
idth(), targetClientRect.height() }, | 7730 { targetClientRect.x(), targetClientRect.y(), targetClientRect.w
idth(), targetClientRect.height() }, |
7738 { clientIntersectionRect.x(), clientIntersectionRect.y(), client
IntersectionRect.width(), clientIntersectionRect.height() }, | 7731 { clientIntersectionRect.x(), clientIntersectionRect.y(), client
IntersectionRect.width(), clientIntersectionRect.height() }, |
7739 isIntersecting, | |
7740 intersectionRatio, | 7732 intersectionRatio, |
7741 target | 7733 target, |
| 7734 isIntersecting |
7742 })); | 7735 })); |
7743 | 7736 |
7744 // 12. Assign threshold to intersectionObserverRegistration's previo
usThreshold property. | 7737 // 12. Assign threshold to intersectionObserverRegistration's previo
usThreshold property. |
7745 registration->previousThresholdIndex = thresholdIndex; | 7738 registration->previousThresholdIndex = thresholdIndex; |
7746 registration->previousIsIntersecting = isIntersecting; | 7739 registration->previousIsIntersecting = isIntersecting; |
7747 anyNeedNotify = true; | 7740 anyNeedNotify = true; |
7748 } | 7741 } |
7749 } | 7742 } |
7750 | 7743 |
7751 return anyNeedNotify; | 7744 return anyNeedNotify; |
(...skipping 570 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8322 | 8315 |
8323 String Document::signedPublicKeyAndChallengeString(unsigned keySizeIndex, const
String& challengeString, const URL& url) | 8316 String Document::signedPublicKeyAndChallengeString(unsigned keySizeIndex, const
String& challengeString, const URL& url) |
8324 { | 8317 { |
8325 Page* page = this->page(); | 8318 Page* page = this->page(); |
8326 if (!page) | 8319 if (!page) |
8327 return emptyString(); | 8320 return emptyString(); |
8328 return page->chrome().client().signedPublicKeyAndChallengeString(keySizeInde
x, challengeString, url); | 8321 return page->chrome().client().signedPublicKeyAndChallengeString(keySizeInde
x, challengeString, url); |
8329 } | 8322 } |
8330 | 8323 |
8331 } // namespace WebCore | 8324 } // namespace WebCore |
LEFT | RIGHT |