Diff
Modified: trunk/Source/WTF/ChangeLog (285045 => 285046)
--- trunk/Source/WTF/ChangeLog 2021-10-29 20:17:26 UTC (rev 285045)
+++ trunk/Source/WTF/ChangeLog 2021-10-29 20:30:27 UTC (rev 285046)
@@ -1,3 +1,17 @@
+2021-10-29 Ayumi Kojima <[email protected]>
+
+ Unreviewed, reverting r285038.
+
+ Reverting the commit because it broke the open source test
+ runs and also caused an impanct on EWS queues
+
+ Reverted changeset:
+
+ "Create constants for all special frame names used in anchor
+ target attribute values and elsewhere"
+ https://bugs.webkit.org/show_bug.cgi?id=232488
+ https://commits.webkit.org/r285038
+
2021-10-29 Darin Adler <[email protected]>
Create constants for all special frame names used in anchor target attribute values and elsewhere
Modified: trunk/Source/WTF/wtf/Forward.h (285045 => 285046)
--- trunk/Source/WTF/wtf/Forward.h 2021-10-29 20:17:26 UTC (rev 285045)
+++ trunk/Source/WTF/wtf/Forward.h 2021-10-29 20:30:27 UTC (rev 285046)
@@ -25,7 +25,6 @@
namespace WTF {
-class ASCIILiteral;
class AbstractLocker;
class AtomString;
class AtomStringImpl;
@@ -48,8 +47,8 @@
class SuspendableWorkQueue;
class TextPosition;
class TextStream;
+class UniquedStringImpl;
class URL;
-class UniquedStringImpl;
class WallTime;
struct AnyThreadsAccessTraits;
@@ -119,7 +118,6 @@
template<class> class unexpected;
}}} // namespace std::experimental::fundamentals_v3
-using WTF::ASCIILiteral;
using WTF::AbstractLocker;
using WTF::AtomString;
using WTF::AtomStringImpl;
Modified: trunk/Source/WTF/wtf/text/ASCIILiteral.h (285045 => 285046)
--- trunk/Source/WTF/wtf/text/ASCIILiteral.h 2021-10-29 20:17:26 UTC (rev 285045)
+++ trunk/Source/WTF/wtf/text/ASCIILiteral.h 2021-10-29 20:30:27 UTC (rev 285046)
@@ -26,7 +26,6 @@
#pragma once
#include <wtf/ASCIICType.h>
-#include <wtf/Forward.h>
#include <wtf/StdLibExtras.h>
namespace WTF {
@@ -79,3 +78,4 @@
} // namespace WTF
using namespace WTF::StringLiterals;
+using WTF::ASCIILiteral;
Modified: trunk/Source/WebCore/ChangeLog (285045 => 285046)
--- trunk/Source/WebCore/ChangeLog 2021-10-29 20:17:26 UTC (rev 285045)
+++ trunk/Source/WebCore/ChangeLog 2021-10-29 20:30:27 UTC (rev 285046)
@@ -1,3 +1,17 @@
+2021-10-29 Ayumi Kojima <[email protected]>
+
+ Unreviewed, reverting r285038.
+
+ Reverting the commit because it broke the open source test
+ runs and also caused an impanct on EWS queues
+
+ Reverted changeset:
+
+ "Create constants for all special frame names used in anchor
+ target attribute values and elsewhere"
+ https://bugs.webkit.org/show_bug.cgi?id=232488
+ https://commits.webkit.org/r285038
+
2021-10-29 Yusuke Suzuki <[email protected]>
Unreviewed, revert r284440, r284397, r284359
Modified: trunk/Source/WebCore/html/HTMLAnchorElement.cpp (285045 => 285046)
--- trunk/Source/WebCore/html/HTMLAnchorElement.cpp 2021-10-29 20:17:26 UTC (rev 285045)
+++ trunk/Source/WebCore/html/HTMLAnchorElement.cpp 2021-10-29 20:30:27 UTC (rev 285046)
@@ -528,7 +528,7 @@
auto effectiveTarget = this->effectiveTarget();
NewFrameOpenerPolicy newFrameOpenerPolicy = NewFrameOpenerPolicy::Allow;
- if (hasRel(Relation::NoOpener) || hasRel(Relation::NoReferrer) || (!hasRel(Relation::Opener) && document().settings().blankAnchorTargetImpliesNoOpenerEnabled() && isBlankTargetFrameName(effectiveTarget)))
+ if (hasRel(Relation::NoOpener) || hasRel(Relation::NoReferrer) || (!hasRel(Relation::Opener) && document().settings().blankAnchorTargetImpliesNoOpenerEnabled() && equalIgnoringASCIICase(effectiveTarget, "_blank")))
newFrameOpenerPolicy = NewFrameOpenerPolicy::Suppress;
auto privateClickMeasurement = parsePrivateClickMeasurement();
Modified: trunk/Source/WebCore/html/HTMLFormElement.cpp (285045 => 285046)
--- trunk/Source/WebCore/html/HTMLFormElement.cpp 2021-10-29 20:17:26 UTC (rev 285045)
+++ trunk/Source/WebCore/html/HTMLFormElement.cpp 2021-10-29 20:30:27 UTC (rev 285046)
@@ -428,7 +428,7 @@
return;
auto relAttributes = parseFormRelAttributes(getAttribute(HTMLNames::relAttr));
- if (relAttributes.noopener || relAttributes.noreferrer || (!relAttributes.opener && document().settings().blankAnchorTargetImpliesNoOpenerEnabled() && isBlankTargetFrameName(formSubmission->target())))
+ if (relAttributes.noopener || relAttributes.noreferrer || (!relAttributes.opener && document().settings().blankAnchorTargetImpliesNoOpenerEnabled() && equalIgnoringASCIICase(formSubmission->target(), "_blank")))
formSubmission->setNewFrameOpenerPolicy(NewFrameOpenerPolicy::Suppress);
if (relAttributes.noreferrer)
formSubmission->setReferrerPolicy(ReferrerPolicy::NoReferrer);
Modified: trunk/Source/WebCore/inspector/InspectorFrontendClientLocal.cpp (285045 => 285046)
--- trunk/Source/WebCore/inspector/InspectorFrontendClientLocal.cpp 2021-10-29 20:17:26 UTC (rev 285045)
+++ trunk/Source/WebCore/inspector/InspectorFrontendClientLocal.cpp 2021-10-29 20:30:27 UTC (rev 285046)
@@ -267,7 +267,7 @@
{
UserGestureIndicator indicator { ProcessingUserGesture };
Frame& mainFrame = m_inspectedPageController->inspectedPage().mainFrame();
- FrameLoadRequest frameLoadRequest { *mainFrame.document(), mainFrame.document()->securityOrigin(), { }, blankTargetFrameName(), InitiatedByMainFrame::Unknown };
+ FrameLoadRequest frameLoadRequest { *mainFrame.document(), mainFrame.document()->securityOrigin(), { }, "_blank"_s, InitiatedByMainFrame::Unknown };
bool created;
WindowFeatures features;
@@ -280,7 +280,7 @@
// FIXME: Why do we compute the absolute URL with respect to |frame| instead of |mainFrame|?
ResourceRequest resourceRequest { frame->document()->completeURL(url) };
- FrameLoadRequest frameLoadRequest2 { *mainFrame.document(), mainFrame.document()->securityOrigin(), WTFMove(resourceRequest), selfTargetFrameName(), InitiatedByMainFrame::Unknown };
+ FrameLoadRequest frameLoadRequest2 { *mainFrame.document(), mainFrame.document()->securityOrigin(), WTFMove(resourceRequest), "_self"_s, InitiatedByMainFrame::Unknown };
frame->loader().changeLocation(WTFMove(frameLoadRequest2));
}
Modified: trunk/Source/WebCore/inspector/agents/InspectorPageAgent.cpp (285045 => 285046)
--- trunk/Source/WebCore/inspector/agents/InspectorPageAgent.cpp 2021-10-29 20:17:26 UTC (rev 285045)
+++ trunk/Source/WebCore/inspector/agents/InspectorPageAgent.cpp 2021-10-29 20:30:27 UTC (rev 285046)
@@ -413,7 +413,7 @@
Frame& frame = m_inspectedPage.mainFrame();
ResourceRequest resourceRequest { frame.document()->completeURL(url) };
- FrameLoadRequest frameLoadRequest { *frame.document(), frame.document()->securityOrigin(), WTFMove(resourceRequest), selfTargetFrameName(), InitiatedByMainFrame::Unknown };
+ FrameLoadRequest frameLoadRequest { *frame.document(), frame.document()->securityOrigin(), WTFMove(resourceRequest), "_self"_s, InitiatedByMainFrame::Unknown };
frameLoadRequest.disableNavigationToInvalidURL();
frame.loader().changeLocation(WTFMove(frameLoadRequest));
Modified: trunk/Source/WebCore/loader/FrameLoader.cpp (285045 => 285046)
--- trunk/Source/WebCore/loader/FrameLoader.cpp 2021-10-29 20:17:26 UTC (rev 285045)
+++ trunk/Source/WebCore/loader/FrameLoader.cpp 2021-10-29 20:30:27 UTC (rev 285046)
@@ -985,7 +985,7 @@
auto* lexicalFrame = lexicalFrameFromCommonVM();
auto initiatedByMainFrame = lexicalFrame && lexicalFrame->isMainFrame() ? InitiatedByMainFrame::Yes : InitiatedByMainFrame::Unknown;
- FrameLoadRequest frameLoadRequest { *m_frame.document(), m_frame.document()->securityOrigin(), { url }, selfTargetFrameName(), initiatedByMainFrame };
+ FrameLoadRequest frameLoadRequest { *m_frame.document(), m_frame.document()->securityOrigin(), { url }, "_self"_s, initiatedByMainFrame };
frameLoadRequest.setNewFrameOpenerPolicy(NewFrameOpenerPolicy::Suppress);
frameLoadRequest.setLockBackForwardList(LockBackForwardList::Yes);
childFrame->loader().loadURL(WTFMove(frameLoadRequest), referer, FrameLoadType::RedirectWithLockedBackForwardList, nullptr, { }, std::nullopt, [] { });
@@ -1346,7 +1346,7 @@
// The search for a target frame is done earlier in the case of form submission.
auto targetFrame = isFormSubmission ? nullptr : RefPtr { findFrameForNavigation(effectiveFrameName) };
if (targetFrame && targetFrame != &m_frame) {
- frameLoadRequest.setFrameName(selfTargetFrameName());
+ frameLoadRequest.setFrameName("_self");
targetFrame->loader().loadURL(WTFMove(frameLoadRequest), referrer, newLoadType, event, WTFMove(formState), WTFMove(privateClickMeasurement), completionHandlerCaller.release());
return;
}
@@ -1376,7 +1376,7 @@
// https://html.spec.whatwg.org/#the-rules-for-choosing-a-browsing-context-given-a-browsing-context-name (Step 8.2)
if (frameLoadRequest.requester().shouldForceNoOpenerBasedOnCOOP()) {
- effectiveFrameName = blankTargetFrameName();
+ effectiveFrameName = "_blank"_s;
openerPolicy = NewFrameOpenerPolicy::Suppress;
}
@@ -3082,7 +3082,7 @@
// https://html.spec.whatwg.org/#the-rules-for-choosing-a-browsing-context-given-a-browsing-context-name (Step 8.2)
if (request.requester().shouldForceNoOpenerBasedOnCOOP()) {
- frameName = blankTargetFrameName();
+ frameName = "_blank"_s;
openerPolicy = NewFrameOpenerPolicy::Suppress;
}
@@ -3574,7 +3574,7 @@
if (sandboxFlags & SandboxPropagatesToAuxiliaryBrowsingContexts)
mainFrame->loader().forceSandboxFlags(sandboxFlags);
- if (!isBlankTargetFrameName(frameName))
+ if (!equalIgnoringASCIICase(frameName, "_blank"))
mainFrame->tree().setName(frameName);
mainFrame->page()->setOpenedByDOM();
@@ -4105,9 +4105,9 @@
if (request.resourceRequest().url().protocolIsJavaScript() && !openerFrame.document()->contentSecurityPolicy()->allowJavaScriptURLs(openerFrame.document()->url().string(), { }, request.resourceRequest().url().string()))
return nullptr;
- if (!request.frameName().isEmpty() && !isBlankTargetFrameName(request.frameName())) {
+ if (!request.frameName().isEmpty() && !equalIgnoringASCIICase(request.frameName(), "_blank")) {
if (RefPtr<Frame> frame = lookupFrame.loader().findFrameForNavigation(request.frameName(), openerFrame.document())) {
- if (!isSelfTargetFrameName(request.frameName())) {
+ if (!equalIgnoringASCIICase(request.frameName(), "_self")) {
if (Page* page = frame->page())
page->chrome().focus();
}
@@ -4117,7 +4117,7 @@
// https://html.spec.whatwg.org/#the-rules-for-choosing-a-browsing-context-given-a-browsing-context-name (Step 8.2)
if (openerFrame.document()->shouldForceNoOpenerBasedOnCOOP()) {
- request.setFrameName(blankTargetFrameName());
+ request.setFrameName("_blank"_s);
features.noopener = true;
}
@@ -4149,7 +4149,7 @@
if (isDocumentSandboxed(openerFrame, SandboxPropagatesToAuxiliaryBrowsingContexts))
frame->loader().forceSandboxFlags(openerFrame.document()->sandboxFlags());
- if (!isBlankTargetFrameName(request.frameName()))
+ if (!equalIgnoringASCIICase(request.frameName(), "_blank"))
frame->tree().setName(request.frameName());
page->chrome().setToolbarsVisible(features.toolBarVisible || features.locationBarVisible);
Modified: trunk/Source/WebCore/loader/NavigationScheduler.cpp (285045 => 285046)
--- trunk/Source/WebCore/loader/NavigationScheduler.cpp 2021-10-29 20:17:26 UTC (rev 285045)
+++ trunk/Source/WebCore/loader/NavigationScheduler.cpp 2021-10-29 20:30:27 UTC (rev 285046)
@@ -194,7 +194,7 @@
ResourceRequest resourceRequest { url(), referrer(), refresh ? ResourceRequestCachePolicy::ReloadIgnoringCacheData : ResourceRequestCachePolicy::UseProtocolCachePolicy };
if (initiatedByMainFrame() == InitiatedByMainFrame::Yes)
resourceRequest.setRequester(ResourceRequest::Requester::Main);
- FrameLoadRequest frameLoadRequest { initiatingDocument(), *securityOrigin(), WTFMove(resourceRequest), selfTargetFrameName(), initiatedByMainFrame() };
+ FrameLoadRequest frameLoadRequest { initiatingDocument(), *securityOrigin(), WTFMove(resourceRequest), "_self", initiatedByMainFrame() };
frameLoadRequest.setLockHistory(lockHistory());
frameLoadRequest.setLockBackForwardList(lockBackForwardList());
frameLoadRequest.disableNavigationToInvalidURL();
@@ -226,7 +226,7 @@
UserGestureIndicator gestureIndicator { userGestureToForward() };
ResourceRequest resourceRequest { url(), referrer(), ResourceRequestCachePolicy::UseProtocolCachePolicy };
- FrameLoadRequest frameLoadRequest { initiatingDocument(), *securityOrigin(), WTFMove(resourceRequest), selfTargetFrameName(), initiatedByMainFrame() };
+ FrameLoadRequest frameLoadRequest { initiatingDocument(), *securityOrigin(), WTFMove(resourceRequest), "_self", initiatedByMainFrame() };
frameLoadRequest.setLockHistory(lockHistory());
frameLoadRequest.setLockBackForwardList(lockBackForwardList());
frameLoadRequest.disableNavigationToInvalidURL();
@@ -253,7 +253,7 @@
UserGestureIndicator gestureIndicator { userGestureToForward() };
ResourceRequest resourceRequest { url(), referrer(), ResourceRequestCachePolicy::ReloadIgnoringCacheData };
- FrameLoadRequest frameLoadRequest { initiatingDocument(), *securityOrigin(), WTFMove(resourceRequest), selfTargetFrameName(), initiatedByMainFrame() };
+ FrameLoadRequest frameLoadRequest { initiatingDocument(), *securityOrigin(), WTFMove(resourceRequest), "_self", initiatedByMainFrame() };
frameLoadRequest.setLockHistory(lockHistory());
frameLoadRequest.setLockBackForwardList(lockBackForwardList());
frameLoadRequest.setShouldOpenExternalURLsPolicy(shouldOpenExternalURLs());
@@ -277,7 +277,7 @@
if (!m_historySteps) {
// Special case for go(0) from a frame -> reload only the frame
// To follow Firefox and IE's behavior, history reload can only navigate the self frame.
- frame.loader().changeLocation(frame.document()->url(), selfTargetFrameName(), 0, ReferrerPolicy::EmptyString, shouldOpenExternalURLs());
+ frame.loader().changeLocation(frame.document()->url(), "_self", 0, ReferrerPolicy::EmptyString, shouldOpenExternalURLs());
return;
}
@@ -470,7 +470,7 @@
auto* frame = lexicalFrameFromCommonVM();
auto initiatedByMainFrame = frame && frame->isMainFrame() ? InitiatedByMainFrame::Yes : InitiatedByMainFrame::Unknown;
- FrameLoadRequest frameLoadRequest { initiatingDocument, securityOrigin, WTFMove(resourceRequest), selfTargetFrameName(), initiatedByMainFrame };
+ FrameLoadRequest frameLoadRequest { initiatingDocument, securityOrigin, WTFMove(resourceRequest), "_self"_s, initiatedByMainFrame };
frameLoadRequest.setLockHistory(lockHistory);
frameLoadRequest.setLockBackForwardList(lockBackForwardList);
frameLoadRequest.disableNavigationToInvalidURL();
Modified: trunk/Source/WebCore/mathml/MathMLElement.cpp (285045 => 285046)
--- trunk/Source/WebCore/mathml/MathMLElement.cpp 2021-10-29 20:17:26 UTC (rev 285045)
+++ trunk/Source/WebCore/mathml/MathMLElement.cpp 2021-10-29 20:30:27 UTC (rev 285046)
@@ -198,7 +198,7 @@
const auto& url = ""
event.setDefaultHandled();
if (auto* frame = document().frame())
- frame->loader().changeLocation(document().completeURL(url), selfTargetFrameName(), &event, ReferrerPolicy::EmptyString, document().shouldOpenExternalURLsPolicyToPropagate());
+ frame->loader().changeLocation(document().completeURL(url), "_self", &event, ReferrerPolicy::EmptyString, document().shouldOpenExternalURLsPolicyToPropagate());
return;
}
}
Modified: trunk/Source/WebCore/page/DOMWindow.cpp (285045 => 285046)
--- trunk/Source/WebCore/page/DOMWindow.cpp 2021-10-29 20:17:26 UTC (rev 285045)
+++ trunk/Source/WebCore/page/DOMWindow.cpp 2021-10-29 20:30:27 UTC (rev 285046)
@@ -2539,7 +2539,7 @@
if (created) {
ResourceRequest resourceRequest { completedURL, referrer, ResourceRequestCachePolicy::UseProtocolCachePolicy };
FrameLoader::addSameSiteInfoToRequestIfNeeded(resourceRequest, openerFrame.document());
- FrameLoadRequest frameLoadRequest { *activeWindow.document(), activeWindow.document()->securityOrigin(), WTFMove(resourceRequest), selfTargetFrameName(), initiatedByMainFrame };
+ FrameLoadRequest frameLoadRequest { *activeWindow.document(), activeWindow.document()->securityOrigin(), WTFMove(resourceRequest), "_self"_s, initiatedByMainFrame };
frameLoadRequest.setShouldOpenExternalURLsPolicy(activeDocument->shouldOpenExternalURLsPolicyToPropagate());
newFrame->loader().changeLocation(WTFMove(frameLoadRequest));
} else if (!urlString.isEmpty()) {
@@ -2608,9 +2608,9 @@
// Get the target frame for the special cases of _top and _parent.
// In those cases, we schedule a location change right now and return early.
RefPtr<Frame> targetFrame;
- if (isTopTargetFrameName(frameName))
+ if (equalIgnoringASCIICase(frameName, "_top"))
targetFrame = &frame->tree().top();
- else if (isParentTargetFrameName(frameName)) {
+ else if (equalIgnoringASCIICase(frameName, "_parent")) {
if (RefPtr parent = frame->tree().parent())
targetFrame = parent;
else
Modified: trunk/Source/WebCore/page/FrameTree.cpp (285045 => 285046)
--- trunk/Source/WebCore/page/FrameTree.cpp 2021-10-29 20:17:26 UTC (rev 285045)
+++ trunk/Source/WebCore/page/FrameTree.cpp 2021-10-29 20:30:27 UTC (rev 285046)
@@ -103,7 +103,7 @@
AtomString FrameTree::uniqueChildName(const AtomString& requestedName) const
{
// If the requested name (the frame's "name" attribute) is unique, just use that.
- if (!requestedName.isEmpty() && !child(requestedName) && !isBlankTargetFrameName(requestedName))
+ if (!requestedName.isEmpty() && !child(requestedName) && !equalIgnoringASCIICase(requestedName, "_blank"))
return requestedName;
// The "name" attribute was not unique or absent. Generate a name based on a counter on the main frame that gets reset
@@ -237,17 +237,18 @@
Frame* FrameTree::find(const AtomString& name, Frame& activeFrame) const
{
- if (isSelfTargetFrameName(name))
+ // FIXME: _current is not part of the HTML specification.
+ if (equalIgnoringASCIICase(name, "_self") || name == "_current" || name.isEmpty())
return &m_thisFrame;
- if (isTopTargetFrameName(name))
+ if (equalIgnoringASCIICase(name, "_top"))
return &top();
- if (isParentTargetFrameName(name))
+ if (equalIgnoringASCIICase(name, "_parent"))
return parent() ? parent() : &m_thisFrame;
- // Since "_blank" cannot be a frame's name, this check is an optimization, not for correctness.
- if (isBlankTargetFrameName(name))
+ // Since "_blank" should never be any frame's name, the following is only an optimization.
+ if (equalIgnoringASCIICase(name, "_blank"))
return nullptr;
// Search subtree starting with this frame first.
@@ -263,11 +264,11 @@
}
// Search the entire tree of each of the other pages in this namespace.
+ // FIXME: Is random order OK?
Page* page = m_thisFrame.page();
if (!page)
return nullptr;
- // FIXME: These pages are searched in random order; that doesn't seem good. Maybe use order of creation?
for (auto& otherPage : page->group().pages()) {
if (&otherPage == page || otherPage.isClosing())
continue;
@@ -459,38 +460,6 @@
return *frame;
}
-ASCIILiteral blankTargetFrameName()
-{
- return "_blank"_s;
-}
-
-// FIXME: Is it important to have this? Can't we just use the empty string everywhere this is used, instead?
-ASCIILiteral selfTargetFrameName()
-{
- return "_self"_s;
-}
-
-bool isBlankTargetFrameName(StringView name)
-{
- return equalLettersIgnoringASCIICase(name, "_blank");
-}
-
-bool isParentTargetFrameName(StringView name)
-{
- return equalLettersIgnoringASCIICase(name, "_parent");
-}
-
-bool isSelfTargetFrameName(StringView name)
-{
- // FIXME: Some day we should remove _current, which is not part of the HTML specification.
- return name.isEmpty() || equalLettersIgnoringASCIICase(name, "_self") || name == "_current";
-}
-
-bool isTopTargetFrameName(StringView name)
-{
- return equalLettersIgnoringASCIICase(name, "_top");
-}
-
} // namespace WebCore
#ifndef NDEBUG
Modified: trunk/Source/WebCore/page/FrameTree.h (285045 => 285046)
--- trunk/Source/WebCore/page/FrameTree.h 2021-10-29 20:17:26 UTC (rev 285045)
+++ trunk/Source/WebCore/page/FrameTree.h 2021-10-29 20:30:27 UTC (rev 285046)
@@ -107,14 +107,6 @@
mutable uint64_t m_frameIDGenerator { 0 };
};
-ASCIILiteral blankTargetFrameName();
-ASCIILiteral selfTargetFrameName();
-
-bool isBlankTargetFrameName(StringView);
-bool isParentTargetFrameName(StringView);
-bool isSelfTargetFrameName(StringView);
-bool isTopTargetFrameName(StringView);
-
} // namespace WebCore
#if ENABLE(TREE_DEBUGGING)
Modified: trunk/Source/WebCore/svg/SVGAElement.cpp (285045 => 285046)
--- trunk/Source/WebCore/svg/SVGAElement.cpp 2021-10-29 20:17:26 UTC (rev 285045)
+++ trunk/Source/WebCore/svg/SVGAElement.cpp 2021-10-29 20:30:27 UTC (rev 285046)
@@ -136,7 +136,7 @@
String target = this->target();
if (target.isEmpty() && attributeWithoutSynchronization(XLinkNames::showAttr) == "new")
- target = blankTargetFrameName();
+ target = "_blank";
event.setDefaultHandled();
RefPtr frame = document().frame();