mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 885289 - Improve context menu behaviour for srcdoc iframes. r=mconley, r=bz
This commit is contained in:
parent
100b814fc3
commit
d60ef2c22d
@ -311,7 +311,7 @@
|
|||||||
label="&openFrameCmd.label;"
|
label="&openFrameCmd.label;"
|
||||||
accesskey="&openFrameCmd.accesskey;"
|
accesskey="&openFrameCmd.accesskey;"
|
||||||
oncommand="gContextMenu.openFrame();"/>
|
oncommand="gContextMenu.openFrame();"/>
|
||||||
<menuseparator/>
|
<menuseparator id="open-frame-sep"/>
|
||||||
<menuitem id="context-reloadframe"
|
<menuitem id="context-reloadframe"
|
||||||
label="&reloadFrameCmd.label;"
|
label="&reloadFrameCmd.label;"
|
||||||
accesskey="&reloadFrameCmd.accesskey;"
|
accesskey="&reloadFrameCmd.accesskey;"
|
||||||
|
@ -277,6 +277,18 @@ nsContextMenu.prototype = {
|
|||||||
this.showItem("context-keywordfield",
|
this.showItem("context-keywordfield",
|
||||||
this.onTextInput && this.onKeywordField);
|
this.onTextInput && this.onKeywordField);
|
||||||
this.showItem("frame", this.inFrame);
|
this.showItem("frame", this.inFrame);
|
||||||
|
|
||||||
|
// srcdoc cannot be opened separately due to concerns about web
|
||||||
|
// content with about:srcdoc in location bar masquerading as trusted
|
||||||
|
// chrome/addon content.
|
||||||
|
// No need to also test for this.inFrame as this is checked in the parent
|
||||||
|
// submenu.
|
||||||
|
this.showItem("context-showonlythisframe", !this.inSrcdocFrame);
|
||||||
|
this.showItem("context-openframeintab", !this.inSrcdocFrame);
|
||||||
|
this.showItem("context-openframe", !this.inSrcdocFrame);
|
||||||
|
this.showItem("context-bookmarkframe", !this.inSrcdocFrame);
|
||||||
|
this.showItem("open-frame-sep", !this.inSrcdocFrame);
|
||||||
|
|
||||||
this.showItem("frame-sep", this.inFrame && isTextSelected);
|
this.showItem("frame-sep", this.inFrame && isTextSelected);
|
||||||
|
|
||||||
// Hide menu entries for images, show otherwise
|
// Hide menu entries for images, show otherwise
|
||||||
@ -516,6 +528,7 @@ nsContextMenu.prototype = {
|
|||||||
this.linkProtocol = "";
|
this.linkProtocol = "";
|
||||||
this.onMathML = false;
|
this.onMathML = false;
|
||||||
this.inFrame = false;
|
this.inFrame = false;
|
||||||
|
this.inSrcdocFrame = false;
|
||||||
this.inSyntheticDoc = false;
|
this.inSyntheticDoc = false;
|
||||||
this.hasBGImage = false;
|
this.hasBGImage = false;
|
||||||
this.bgImageURL = "";
|
this.bgImageURL = "";
|
||||||
@ -679,11 +692,11 @@ nsContextMenu.prototype = {
|
|||||||
// See if the user clicked in a frame.
|
// See if the user clicked in a frame.
|
||||||
var docDefaultView = this.target.ownerDocument.defaultView;
|
var docDefaultView = this.target.ownerDocument.defaultView;
|
||||||
if (docDefaultView != docDefaultView.top) {
|
if (docDefaultView != docDefaultView.top) {
|
||||||
// srcdoc iframes are not considered frames for concerns about web
|
|
||||||
// content with about:srcdoc in location bar masqurading as trusted
|
|
||||||
// chrome/addon content.
|
|
||||||
if (!this.target.ownerDocument.isSrcdocDocument)
|
|
||||||
this.inFrame = true;
|
this.inFrame = true;
|
||||||
|
|
||||||
|
if (this.target.ownerDocument.isSrcdocDocument) {
|
||||||
|
this.inSrcdocFrame = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// if the document is editable, show context menu like in text inputs
|
// if the document is editable, show context menu like in text inputs
|
||||||
@ -713,6 +726,7 @@ nsContextMenu.prototype = {
|
|||||||
this.onCompletedImage = false;
|
this.onCompletedImage = false;
|
||||||
this.onMathML = false;
|
this.onMathML = false;
|
||||||
this.inFrame = false;
|
this.inFrame = false;
|
||||||
|
this.inSrcdocFrame = false;
|
||||||
this.hasBGImage = false;
|
this.hasBGImage = false;
|
||||||
this.isDesignMode = true;
|
this.isDesignMode = true;
|
||||||
this.onEditableArea = true;
|
this.onEditableArea = true;
|
||||||
|
@ -67,5 +67,6 @@ Browser context menu subtest.
|
|||||||
<input id="test-select-input-text-type-password" type="password" value="password">
|
<input id="test-select-input-text-type-password" type="password" value="password">
|
||||||
<embed id="test-plugin" style="width: 200px; height: 200px;" type="application/x-test"></embed>
|
<embed id="test-plugin" style="width: 200px; height: 200px;" type="application/x-test"></embed>
|
||||||
<img id="test-longdesc" src="ctxmenu-image.png" longdesc="http://www.mozilla.org"></embed>
|
<img id="test-longdesc" src="ctxmenu-image.png" longdesc="http://www.mozilla.org"></embed>
|
||||||
|
<iframe id="test-srcdoc" width="98" height="98" srcdoc="Hello World" style="border: 1px solid black"></iframe>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
@ -955,6 +955,33 @@ function runTest(testNum) {
|
|||||||
"context-viewimagedesc", true
|
"context-viewimagedesc", true
|
||||||
].concat(inspectItems));
|
].concat(inspectItems));
|
||||||
closeContextMenu();
|
closeContextMenu();
|
||||||
|
openContextMenuFor(srcdoc);
|
||||||
|
return;
|
||||||
|
|
||||||
|
case 31:
|
||||||
|
// Context menu for an iframe with srcdoc attribute set
|
||||||
|
checkContextMenu(["context-back", false,
|
||||||
|
"context-forward", false,
|
||||||
|
"context-reload", true,
|
||||||
|
"---", null,
|
||||||
|
"context-bookmarkpage", true,
|
||||||
|
"context-savepage", true,
|
||||||
|
"---", null,
|
||||||
|
"context-viewbgimage", false,
|
||||||
|
"context-selectall", true,
|
||||||
|
"frame", null,
|
||||||
|
["context-reloadframe", true,
|
||||||
|
"---", null,
|
||||||
|
"context-saveframe", true,
|
||||||
|
"---", null,
|
||||||
|
"context-printframe", true,
|
||||||
|
"---", null,
|
||||||
|
"context-viewframesource", true,
|
||||||
|
"context-viewframeinfo", true], null,
|
||||||
|
"---", null,
|
||||||
|
"context-viewsource", true,
|
||||||
|
"context-viewinfo", true
|
||||||
|
].concat(inspectItems));
|
||||||
|
|
||||||
// finish test
|
// finish test
|
||||||
subwindow.close();
|
subwindow.close();
|
||||||
@ -984,7 +1011,7 @@ var text, link, mailto, input, img, canvas, video_ok, video_bad, video_bad2,
|
|||||||
iframe, video_in_iframe, image_in_iframe, textarea, contenteditable,
|
iframe, video_in_iframe, image_in_iframe, textarea, contenteditable,
|
||||||
inputspell, pagemenu, dom_full_screen, plainTextItems, audio_in_video,
|
inputspell, pagemenu, dom_full_screen, plainTextItems, audio_in_video,
|
||||||
selecttext, selecttextlink, imagelink, select_inputtext, select_inputtext_password,
|
selecttext, selecttextlink, imagelink, select_inputtext, select_inputtext_password,
|
||||||
plugin, longdesc;
|
plugin, longdesc, iframe;
|
||||||
|
|
||||||
function startTest() {
|
function startTest() {
|
||||||
chromeWin = SpecialPowers.wrap(subwindow)
|
chromeWin = SpecialPowers.wrap(subwindow)
|
||||||
@ -1034,6 +1061,7 @@ function startTest() {
|
|||||||
select_inputtext_password = subwindow.document.getElementById("test-select-input-text-type-password");
|
select_inputtext_password = subwindow.document.getElementById("test-select-input-text-type-password");
|
||||||
plugin = subwindow.document.getElementById("test-plugin");
|
plugin = subwindow.document.getElementById("test-plugin");
|
||||||
longdesc = subwindow.document.getElementById("test-longdesc");
|
longdesc = subwindow.document.getElementById("test-longdesc");
|
||||||
|
srcdoc = subwindow.document.getElementById("test-srcdoc");
|
||||||
|
|
||||||
contextMenu.addEventListener("popupshown", function() { runTest(++testNum); }, false);
|
contextMenu.addEventListener("popupshown", function() { runTest(++testNum); }, false);
|
||||||
runTest(1);
|
runTest(1);
|
||||||
|
@ -6105,7 +6105,8 @@ nsContentUtils::SetUpChannelOwner(nsIPrincipal* aLoadingPrincipal,
|
|||||||
if (aForceOwner) {
|
if (aForceOwner) {
|
||||||
nsAutoCString uriStr;
|
nsAutoCString uriStr;
|
||||||
aURI->GetSpec(uriStr);
|
aURI->GetSpec(uriStr);
|
||||||
if(!uriStr.EqualsLiteral("about:srcdoc")) {
|
if(!uriStr.EqualsLiteral("about:srcdoc") &&
|
||||||
|
!uriStr.EqualsLiteral("view-source:about:srcdoc")) {
|
||||||
nsCOMPtr<nsIURI> ownerURI;
|
nsCOMPtr<nsIURI> ownerURI;
|
||||||
nsresult rv = aLoadingPrincipal->GetURI(getter_AddRefs(ownerURI));
|
nsresult rv = aLoadingPrincipal->GetURI(getter_AddRefs(ownerURI));
|
||||||
MOZ_ASSERT(NS_SUCCEEDED(rv) && SchemeIs(ownerURI, NS_NULLPRINCIPAL_SCHEME));
|
MOZ_ASSERT(NS_SUCCEEDED(rv) && SchemeIs(ownerURI, NS_NULLPRINCIPAL_SCHEME));
|
||||||
|
Loading…
Reference in New Issue
Block a user