mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-11 12:25:53 +00:00
Bug 1509101. Stop passing around anchor targets as char16_t*; use nsAString instead. r=baku
Differential Revision: https://phabricator.services.mozilla.com/D12579 --HG-- extra : moz-landing-system : lando
This commit is contained in:
parent
e39a94637e
commit
c38419de6d
@ -13071,7 +13071,7 @@ class OnLinkClickEvent : public Runnable
|
||||
public:
|
||||
OnLinkClickEvent(nsDocShell* aHandler, nsIContent* aContent,
|
||||
nsIURI* aURI,
|
||||
const char16_t* aTargetSpec,
|
||||
const nsAString& aTargetSpec,
|
||||
const nsAString& aFileName,
|
||||
nsIInputStream* aPostDataStream,
|
||||
nsIInputStream* aHeadersDataStream,
|
||||
@ -13092,7 +13092,7 @@ public:
|
||||
AutoJSAPI jsapi;
|
||||
if (mIsTrusted || jsapi.Init(mContent->OwnerDoc()->GetScopeObject())) {
|
||||
mHandler->OnLinkClickSync(mContent, mURI,
|
||||
mTargetSpec.get(), mFileName,
|
||||
mTargetSpec, mFileName,
|
||||
mPostDataStream,
|
||||
mHeadersDataStream, mNoOpenerImplied,
|
||||
nullptr, nullptr, mIsUserTriggered,
|
||||
@ -13119,7 +13119,7 @@ private:
|
||||
OnLinkClickEvent::OnLinkClickEvent(nsDocShell* aHandler,
|
||||
nsIContent* aContent,
|
||||
nsIURI* aURI,
|
||||
const char16_t* aTargetSpec,
|
||||
const nsAString& aTargetSpec,
|
||||
const nsAString& aFileName,
|
||||
nsIInputStream* aPostDataStream,
|
||||
nsIInputStream* aHeadersDataStream,
|
||||
@ -13146,7 +13146,7 @@ OnLinkClickEvent::OnLinkClickEvent(nsDocShell* aHandler,
|
||||
NS_IMETHODIMP
|
||||
nsDocShell::OnLinkClick(nsIContent* aContent,
|
||||
nsIURI* aURI,
|
||||
const char16_t* aTargetSpec,
|
||||
const nsAString& aTargetSpec,
|
||||
const nsAString& aFileName,
|
||||
nsIInputStream* aPostDataStream,
|
||||
nsIInputStream* aHeadersDataStream,
|
||||
@ -13183,10 +13183,9 @@ nsDocShell::OnLinkClick(nsIContent* aContent,
|
||||
nsCOMPtr<nsIWebBrowserChrome3> browserChrome3 = do_GetInterface(mTreeOwner);
|
||||
bool noOpenerImplied = false;
|
||||
if (browserChrome3) {
|
||||
nsAutoString oldTarget(aTargetSpec);
|
||||
rv = browserChrome3->OnBeforeLinkTraversal(oldTarget, aURI,
|
||||
rv = browserChrome3->OnBeforeLinkTraversal(aTargetSpec, aURI,
|
||||
aContent, mIsAppTab, target);
|
||||
if (!oldTarget.Equals(target)) {
|
||||
if (!aTargetSpec.Equals(target)) {
|
||||
noOpenerImplied = true;
|
||||
}
|
||||
}
|
||||
@ -13196,7 +13195,7 @@ nsDocShell::OnLinkClick(nsIContent* aContent,
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIRunnable> ev =
|
||||
new OnLinkClickEvent(this, aContent, aURI, target.get(), aFileName,
|
||||
new OnLinkClickEvent(this, aContent, aURI, target, aFileName,
|
||||
aPostDataStream, aHeadersDataStream, noOpenerImplied,
|
||||
aIsUserTriggered, aIsTrusted, aTriggeringPrincipal);
|
||||
return DispatchToTabGroup(TaskCategory::UI, ev.forget());
|
||||
@ -13213,7 +13212,7 @@ IsElementAnchorOrArea(nsIContent* aContent)
|
||||
NS_IMETHODIMP
|
||||
nsDocShell::OnLinkClickSync(nsIContent* aContent,
|
||||
nsIURI* aURI,
|
||||
const char16_t* aTargetSpec,
|
||||
const nsAString& aTargetSpec,
|
||||
const nsAString& aFileName,
|
||||
nsIInputStream* aPostDataStream,
|
||||
nsIInputStream* aHeadersDataStream,
|
||||
@ -13326,8 +13325,6 @@ nsDocShell::OnLinkClickSync(nsIContent* aContent,
|
||||
// referer could be null here in some odd cases, but that's ok,
|
||||
// we'll just load the link w/o sending a referer in those cases.
|
||||
|
||||
nsAutoString target(aTargetSpec);
|
||||
|
||||
// If this is an anchor element, grab its type property to use as a hint
|
||||
nsAutoString typeHint;
|
||||
RefPtr<HTMLAnchorElement> anchor = HTMLAnchorElement::FromNode(aContent);
|
||||
@ -13366,7 +13363,7 @@ nsDocShell::OnLinkClickSync(nsIContent* aContent,
|
||||
triggeringPrincipal,
|
||||
aContent->NodePrincipal(),
|
||||
flags,
|
||||
target, // Window target
|
||||
aTargetSpec, // Window target
|
||||
NS_LossyConvertUTF16toASCII(typeHint),
|
||||
aFileName, // Download as file
|
||||
aPostDataStream, // Post data stream
|
||||
@ -13388,7 +13385,7 @@ nsDocShell::OnLinkClickSync(nsIContent* aContent,
|
||||
NS_IMETHODIMP
|
||||
nsDocShell::OnOverLink(nsIContent* aContent,
|
||||
nsIURI* aURI,
|
||||
const char16_t* aTargetSpec)
|
||||
const nsAString& aTargetSpec)
|
||||
{
|
||||
if (aContent->IsEditable()) {
|
||||
return NS_OK;
|
||||
|
@ -196,7 +196,7 @@ public:
|
||||
// nsILinkHandler
|
||||
NS_IMETHOD OnLinkClick(nsIContent* aContent,
|
||||
nsIURI* aURI,
|
||||
const char16_t* aTargetSpec,
|
||||
const nsAString& aTargetSpec,
|
||||
const nsAString& aFileName,
|
||||
nsIInputStream* aPostDataStream,
|
||||
nsIInputStream* aHeadersDataStream,
|
||||
@ -205,7 +205,7 @@ public:
|
||||
nsIPrincipal* aTriggeringPrincipal) override;
|
||||
NS_IMETHOD OnLinkClickSync(nsIContent* aContent,
|
||||
nsIURI* aURI,
|
||||
const char16_t* aTargetSpec,
|
||||
const nsAString& aTargetSpec,
|
||||
const nsAString& aFileName,
|
||||
nsIInputStream* aPostDataStream = 0,
|
||||
nsIInputStream* aHeadersDataStream = 0,
|
||||
@ -216,7 +216,7 @@ public:
|
||||
nsIPrincipal* aTriggeringPrincipal = nullptr) override;
|
||||
NS_IMETHOD OnOverLink(nsIContent* aContent,
|
||||
nsIURI* aURI,
|
||||
const char16_t* aTargetSpec) override;
|
||||
const nsAString& aTargetSpec) override;
|
||||
NS_IMETHOD OnLeaveLink() override;
|
||||
|
||||
// Don't use NS_DECL_NSILOADCONTEXT because some of nsILoadContext's methods
|
||||
|
@ -42,7 +42,7 @@ public:
|
||||
*/
|
||||
NS_IMETHOD OnLinkClick(nsIContent* aContent,
|
||||
nsIURI* aURI,
|
||||
const char16_t* aTargetSpec,
|
||||
const nsAString& aTargetSpec,
|
||||
const nsAString& aFileName,
|
||||
nsIInputStream* aPostDataStream,
|
||||
nsIInputStream* aHeadersDataStream,
|
||||
@ -71,7 +71,7 @@ public:
|
||||
*/
|
||||
NS_IMETHOD OnLinkClickSync(nsIContent* aContent,
|
||||
nsIURI* aURI,
|
||||
const char16_t* aTargetSpec,
|
||||
const nsAString& aTargetSpec,
|
||||
const nsAString& aFileName,
|
||||
nsIInputStream* aPostDataStream = 0,
|
||||
nsIInputStream* aHeadersDataStream = 0,
|
||||
@ -91,7 +91,7 @@ public:
|
||||
*/
|
||||
NS_IMETHOD OnOverLink(nsIContent* aContent,
|
||||
nsIURI* aURLSpec,
|
||||
const char16_t* aTargetSpec) = 0;
|
||||
const nsAString& aTargetSpec) = 0;
|
||||
|
||||
/**
|
||||
* Process the mouse leaving a link.
|
||||
|
@ -5543,7 +5543,7 @@ nsContentUtils::TriggerLink(nsIContent *aContent, nsPresContext *aPresContext,
|
||||
}
|
||||
|
||||
if (!aClick) {
|
||||
handler->OnOverLink(aContent, aLinkURI, aTargetSpec.get());
|
||||
handler->OnOverLink(aContent, aLinkURI, aTargetSpec);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -5576,7 +5576,7 @@ nsContentUtils::TriggerLink(nsIContent *aContent, nsPresContext *aPresContext,
|
||||
}
|
||||
|
||||
handler->OnLinkClick(aContent, aLinkURI,
|
||||
fileName.IsVoid() ? aTargetSpec.get() : EmptyString().get(),
|
||||
fileName.IsVoid() ? aTargetSpec : EmptyString(),
|
||||
fileName, nullptr, nullptr, EventStateManager::IsHandlingUserInput(),
|
||||
aIsTrusted, aContent->NodePrincipal());
|
||||
}
|
||||
|
@ -751,7 +751,7 @@ HTMLFormElement::SubmitSubmission(HTMLFormSubmission* aFormSubmission)
|
||||
nsAutoString target;
|
||||
aFormSubmission->GetTarget(target);
|
||||
rv = linkHandler->OnLinkClickSync(this, actionURI,
|
||||
target.get(),
|
||||
target,
|
||||
VoidString(),
|
||||
postDataStream,
|
||||
nullptr, false,
|
||||
|
@ -484,7 +484,7 @@ NS_IMETHODIMP nsPluginInstanceOwner::GetURL(const char *aURL,
|
||||
triggeringPrincipal = NullPrincipal::CreateWithInheritedAttributes(content->NodePrincipal());
|
||||
}
|
||||
|
||||
rv = lh->OnLinkClick(content, uri, unitarget.get(), VoidString(),
|
||||
rv = lh->OnLinkClick(content, uri, unitarget, VoidString(),
|
||||
aPostStream, headersDataStream,
|
||||
/* isUserTriggered */ false,
|
||||
/* isTrusted */ true, triggeringPrincipal);
|
||||
|
@ -0,0 +1,5 @@
|
||||
<script>
|
||||
window.parent.postMessage({
|
||||
"name": window.name,
|
||||
}, "*");
|
||||
</script>
|
@ -0,0 +1,34 @@
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Targeting with embedded null in target</title>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<iframe name="abc">
|
||||
</iframe>
|
||||
<a href="resources/message-parent.html" target="abc">Click me</a>
|
||||
<script>
|
||||
var t = async_test();
|
||||
var target_name = "abc\u0000def";
|
||||
|
||||
onmessage = t.step_func_done(function (e) {
|
||||
assert_equals(e.data.name, target_name,
|
||||
"Should come from a window with the right name");
|
||||
assert_equals(e.source, frames[1],
|
||||
"Should come frome the right window");
|
||||
});
|
||||
|
||||
t.step(function() {
|
||||
var iframe = document.createElement("iframe");
|
||||
iframe.setAttribute("name", target_name);
|
||||
document.body.appendChild(iframe);
|
||||
var a = document.querySelector("a");
|
||||
a.target = target_name;
|
||||
a.click();
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
Loading…
Reference in New Issue
Block a user