Closed
Bug 844169
Opened 12 years ago
Closed 12 years ago
Move HTMLIFrameElement to WebIDL
Categories
(Core :: DOM: Core & HTML, defect)
Tracking
()
RESOLVED
FIXED
mozilla22
People
(Reporter: ehsan.akhgari, Assigned: bzbarsky)
References
(Blocks 1 open bug)
Details
Attachments
(4 files, 4 obsolete files)
16.85 KB,
patch
|
bzbarsky
:
review+
ehsan.akhgari
:
checkin+
|
Details | Diff | Splinter Review |
5.14 KB,
patch
|
cpearce
:
review+
ehsan.akhgari
:
checkin+
|
Details | Diff | Splinter Review |
59.62 KB,
patch
|
bzbarsky
:
review+
ehsan.akhgari
:
checkin+
|
Details | Diff | Splinter Review |
10.79 KB,
patch
|
Ms2ger
:
review+
|
Details | Diff | Splinter Review |
No description provided.
Reporter | ||
Updated•12 years ago
|
Assignee: nobody → ehsan
Reporter | ||
Comment 1•12 years ago
|
||
I have the patches for this bug, but I need to know the answers to two questions:
1. Our allowfullscreen XPCOM property <http://mxr.mozilla.org/mozilla-central/source/dom/interfaces/html/nsIDOMHTMLIFrameElement.idl#41> has the wrong case (should be allowFullscreen). Should I just rename the XPCOM property and update the code/tests that depend on it?
2. nsHTMLIFrameElement implements nsIDOMGetSVGDocument which provides the getSVGDocument interface. As far as I can tell, this interface maps to the GetSVGDocument interface in the SVG spec <http://www.w3.org/TR/SVG/struct.html#InterfaceGetSVGDocument>. Should I just add that interface and say "HTMLIFrameElement implements GetSVGDocument;"? The HTML spec doesn't mention this interface at all.
Reporter | ||
Comment 2•12 years ago
|
||
(In reply to :Ehsan Akhgari from comment #1)
> 2. nsHTMLIFrameElement implements nsIDOMGetSVGDocument which provides the
> getSVGDocument interface. As far as I can tell, this interface maps to the
> GetSVGDocument interface in the SVG spec
> <http://www.w3.org/TR/SVG/struct.html#InterfaceGetSVGDocument>. Should I
> just add that interface and say "HTMLIFrameElement implements
> GetSVGDocument;"? The HTML spec doesn't mention this interface at all.
(This was implemented in bug 287465.)
Reporter | ||
Comment 3•12 years ago
|
||
(And if I need to add the GetSVGDocument Web IDL interface, should I mark it as [NoInterfaceObject]? If so, where can I file a bug against the SVG spec to add that change?)
Reporter | ||
Comment 4•12 years ago
|
||
Another question, http://mxr.mozilla.org/mozilla-central/source/content/html/content/test/test_iframe_sandbox_general.html?force=1#94 seems to check that the default sandbox property returns an empty string. With my patches, it returns something which converts to an empty string (== "" returns true but === "" doesn't). I'm not sure what that means...
Reporter | ||
Comment 5•12 years ago
|
||
Attachment #717473 -
Flags: review?(bzbarsky)
Reporter | ||
Comment 6•12 years ago
|
||
Reporter | ||
Comment 7•12 years ago
|
||
Ah, there is also the nsIDOMMozBrowserFrame which we probably need to support in the Web IDL binding. Should mozbrowser be exposed to content or just to chrome?
Reporter | ||
Comment 8•12 years ago
|
||
(In reply to :Ehsan Akhgari from comment #7)
> Ah, there is also the nsIDOMMozBrowserFrame which we probably need to
> support in the Web IDL binding. Should mozbrowser be exposed to content or
> just to chrome?
(See also bug 844462 -- we forgot to handle this for HTMLFrameElement too.)
Reporter | ||
Comment 9•12 years ago
|
||
(In reply to :Ehsan Akhgari from comment #7)
> Ah, there is also the nsIDOMMozBrowserFrame which we probably need to
> support in the Web IDL binding. Should mozbrowser be exposed to content or
> just to chrome?
Justin might know what we should do here too...
Assignee | ||
Comment 10•12 years ago
|
||
I believe the claim was that mozbrowser only needs to be exposed to chrome. Justin?
Flags: needinfo?(justin.lebar+bug)
Assignee | ||
Comment 11•12 years ago
|
||
> Should I just rename the XPCOM property and update the code/tests that depend on it?
Chris? What happened here is that we implemented the spec proposal, and then the spec got bikeshedded to a change of case, iirc. What's not clear to me is how stable the post-bikeshedding state is.
Flags: needinfo?(cpearce)
Assignee | ||
Comment 12•12 years ago
|
||
> Should I just add that interface and say "HTMLIFrameElement implements GetSVGDocument;"?
For <object> and <embed> I just put that on a partial interface.
Worth checking what the SVG spec is actually doing here. The problem is that I can't find a non-obsolete version in actual readable form and heycam is on vacation. :(
Assignee | ||
Comment 13•12 years ago
|
||
Bugs against the SVG spec presumably go to www-svg@w3.org, cc heycam and jwatt.
Assignee | ||
Comment 14•12 years ago
|
||
> I'm not sure what that means...
In the XPCOM binding, .sandbox returns a string.
In the WebIDL binding it returns an object with a stringifier. Being an object, it's not === to any string, but if you use == the stringifier is invoked to produce a string, and in this case that returns "".
What we should be doing here, I'm not sure. The spec for .sandbox was insane last I checked it, though hixie is more or less ignoring my feedback to that effect. For now it might be best to keep the XPCOM behavior and file a bug on the discrepancy with the current spec draft or something.
Comment 15•12 years ago
|
||
(In reply to Boris Zbarsky (:bz) from comment #10)
> I believe the claim was that mozbrowser only needs to be exposed to chrome.
> Justin?
I may have said the wrong thing before; I'm not sure anymore. Is the question whether we expect the following code to work in content
var iframe = document.createElement('iframe');
iframe.mozbrowser = true;
document.body.appendChild(iframe);
? I guess it would be nice if that worked. But we can also use setAttribute (right?). If we're going to break the idiom above, we should ensure that Gaia isn't using it (grepping for 'mozbrowser' should be sufficient). I guess our tests aren't using it, since they aren't all orange.
Flags: needinfo?(justin.lebar+bug)
Reporter | ||
Comment 16•12 years ago
|
||
(In reply to comment #15)
> (In reply to Boris Zbarsky (:bz) from comment #10)
> > I believe the claim was that mozbrowser only needs to be exposed to chrome.
> > Justin?
>
> I may have said the wrong thing before; I'm not sure anymore. Is the question
> whether we expect the following code to work in content
>
> var iframe = document.createElement('iframe');
> iframe.mozbrowser = true;
> document.body.appendChild(iframe);
Well, that, and:
var supportsMozbrowser = "mozbrowser" in iframe;
// should supportsMozbrowser be true here?
> ? I guess it would be nice if that worked. But we can also use setAttribute
> (right?).
Yeah, setAttribute will continue to work regardless.
> If we're going to break the idiom above, we should ensure that Gaia
> isn't using it (grepping for 'mozbrowser' should be sufficient). I guess our
> tests aren't using it, since they aren't all orange.
Hmm, is that enough? Don't we support mozbrowser as an API which others can use to write browser apps? (Well, I'm not sure if there is a "spec" for mozbrowser and how it's supposed to work.)
Reporter | ||
Comment 17•12 years ago
|
||
(In reply to comment #14)
> > I'm not sure what that means...
>
> In the XPCOM binding, .sandbox returns a string.
>
> In the WebIDL binding it returns an object with a stringifier. Being an
> object, it's not === to any string, but if you use == the stringifier is
> invoked to produce a string, and in this case that returns "".
I see. Actually that should have been obvious, not sure why I got confused.
> What we should be doing here, I'm not sure. The spec for .sandbox was insane
> last I checked it, though hixie is more or less ignoring my feedback to that
> effect. For now it might be best to keep the XPCOM behavior and file a bug on
> the discrepancy with the current spec draft or something.
Keeping the XPCOM behavior means making it a string property, right?
I'm not sure what discrepancy you're talking about with regards to the spec draft...
Reporter | ||
Comment 18•12 years ago
|
||
(In reply to comment #12)
> > Should I just add that interface and say "HTMLIFrameElement implements GetSVGDocument;"?
>
> For <object> and <embed> I just put that on a partial interface.
>
> Worth checking what the SVG spec is actually doing here. The problem is that I
> can't find a non-obsolete version in actual readable form and heycam is on
> vacation. :(
So I guess I can just put it on a partial interface for now, especially since that's what you've already done, and we might as well be consistent in our not-knowing-what-to-do. :-)
Assignee | ||
Comment 19•12 years ago
|
||
> Keeping the XPCOM behavior means making it a string property, right?
Yes.
> I'm not sure what discrepancy you're talking about with regards to the spec draft...
The one we'd have wrt the spec if we leave it a string property.
Comment 20•12 years ago
|
||
> Hmm, is that enough? Don't we support mozbrowser as an API which others can use to write browser
> apps? (Well, I'm not sure if there is a "spec" for mozbrowser and how it's supposed to work.)
We do, but such apps are "privileged", which means we have to review them. Given that, plus the fact that the API is essentially un-documented and also going to change significantly going forward, I'm not particularly worried about breaking apps.
Assignee | ||
Comment 21•12 years ago
|
||
Comment on attachment 717473 [details] [diff] [review]
Part 1: Rename nsHTMLIFrameElement to mozilla::dom::HTMLIFrameElement
r=me
Attachment #717473 -
Flags: review?(bzbarsky) → review+
Comment 22•12 years ago
|
||
It seems kind of silly to me that the HTMLIFrameElement.allowFullscreen IDL attribute reflects the allowfullscreen content attribute which differs in spelling (capitalization of 'f'), but it looks like that's the convention used elsewhere.
Anne: Is just to clarify, it looks like camelCase is the convention for IDL attributes, and all lower case is the convention for content attributes?
Flags: needinfo?(cpearce)
Comment 23•12 years ago
|
||
Yes. It's all over HTML, e.g. crossorigin vs crossOrigin. And fullscreen is a single word in the unprefixed world.
Reporter | ||
Comment 24•12 years ago
|
||
Comment on attachment 717473 [details] [diff] [review]
Part 1: Rename nsHTMLIFrameElement to mozilla::dom::HTMLIFrameElement
https://hg.mozilla.org/integration/mozilla-inbound/rev/62243742ec76
Attachment #717473 -
Flags: checkin+
Reporter | ||
Updated•12 years ago
|
Whiteboard: [leave open]
Reporter | ||
Comment 25•12 years ago
|
||
(In reply to Boris Zbarsky (:bz) from comment #19)
> > I'm not sure what discrepancy you're talking about with regards to the spec draft...
>
> The one we'd have wrt the spec if we leave it a string property.
Ah, I read that as you asking me to file a spec bug for some reason! Filed bug 845057.
(In reply to Justin Lebar [:jlebar] from comment #20)
> > Hmm, is that enough? Don't we support mozbrowser as an API which others can use to write browser
> > apps? (Well, I'm not sure if there is a "spec" for mozbrowser and how it's supposed to work.)
>
> We do, but such apps are "privileged", which means we have to review them.
> Given that, plus the fact that the API is essentially un-documented and also
> going to change significantly going forward, I'm not particularly worried
> about breaking apps.
OK, sounds good. Thanks!
(We still need Chris to weigh in on allowFullscreen...)
Flags: needinfo?(cpearce)
Comment 26•12 years ago
|
||
(In reply to :Ehsan Akhgari from comment #1)
> I have the patches for this bug, but I need to know the answers to two
> questions:
>
> 1. Our allowfullscreen XPCOM property
> <http://mxr.mozilla.org/mozilla-central/source/dom/interfaces/html/
> nsIDOMHTMLIFrameElement.idl#41> has the wrong case (should be
> allowFullscreen). Should I just rename the XPCOM property and update the
> code/tests that depend on it?
Yes, please just rename the XPCOM property and update any tests/code that depend on that.
Flags: needinfo?(cpearce)
Reporter | ||
Comment 27•12 years ago
|
||
Attachment #717474 -
Attachment is obsolete: true
Attachment #718195 -
Flags: review?(cpearce)
Updated•12 years ago
|
Attachment #718195 -
Flags: review?(cpearce) → review+
Comment 28•12 years ago
|
||
Reporter | ||
Comment 29•12 years ago
|
||
Comment on attachment 718195 [details] [diff] [review]
Part 2: Rename nsIDOMHTMLIFrameElement.allowfullscreen to allowFullscreen
https://hg.mozilla.org/integration/mozilla-inbound/rev/91d78336d372
Attachment #718195 -
Flags: checkin+
Reporter | ||
Comment 30•12 years ago
|
||
Attachment #718219 -
Flags: review?(bzbarsky)
Reporter | ||
Comment 31•12 years ago
|
||
Reporter | ||
Comment 32•12 years ago
|
||
Comment on attachment 718219 [details] [diff] [review]
Part 3: Move HTMLIFrameElement to Web IDL bindings
This still needs more work...
Attachment #718219 -
Attachment is obsolete: true
Attachment #718219 -
Flags: review?(bzbarsky)
Assignee | ||
Comment 33•12 years ago
|
||
Do any websites use .allowfullscreen in practice? If so, we may want both names alongside each other....
Comment 34•12 years ago
|
||
Comment 35•12 years ago
|
||
I should have said this here: WebKit's code does not appear to have an IDL attribute for allowfullscreen so impact is likely minimal on that front.
Reporter | ||
Comment 36•12 years ago
|
||
So, I was writing a patch to make sure that iframe.mozbrowser is only accessed with chrome privileges, which requires a whole bunch of stuff to be wrapped in SpecialPowers.wrap, and I hit bug 845379, which makes this impossible to fix.
Reporter | ||
Comment 37•12 years ago
|
||
This is the patch I was talking about.
Attachment #718471 -
Flags: review?(bzbarsky)
Comment 38•12 years ago
|
||
> So, I was writing a patch to make sure that iframe.mozbrowser is only accessed with chrome
> privileges, which requires a whole bunch of stuff to be wrapped in SpecialPowers.wrap,
Is setAttribute insufficient for some reason?
Assignee | ||
Comment 39•12 years ago
|
||
Comment on attachment 718471 [details] [diff] [review]
Part 3: Make sure that all callers of HTMLIFrameElement.mozbrowser have chrome privileges
r=me
Attachment #718471 -
Flags: review?(bzbarsky) → review+
Reporter | ||
Comment 40•12 years ago
|
||
(In reply to Justin Lebar [:jlebar] from comment #38)
> > So, I was writing a patch to make sure that iframe.mozbrowser is only accessed with chrome
> > privileges, which requires a whole bunch of stuff to be wrapped in SpecialPowers.wrap,
>
> Is setAttribute insufficient for some reason?
No, I'm just retarded and didn't think of it in time. :)
Reporter | ||
Comment 41•12 years ago
|
||
Comment on attachment 718471 [details] [diff] [review]
Part 3: Make sure that all callers of HTMLIFrameElement.mozbrowser have chrome privileges
https://hg.mozilla.org/integration/mozilla-inbound/rev/ff43e3133f5a
Attachment #718471 -
Flags: checkin+
Reporter | ||
Comment 42•12 years ago
|
||
So I did a try push on the final patch which I will attach in a sec, and here's the results: <https://tbpl.mozilla.org/?tree=Try&rev=02af205fbc9c> There's a number of more test failures which are not obvious to me, and I'm afraid I won't have time in the near future to debug them. It would be great if somebody else can take this over. Sorry for dropping the ball here. :(
Assignee: ehsan → nobody
Reporter | ||
Comment 43•12 years ago
|
||
Reporter | ||
Comment 44•12 years ago
|
||
Oh, one other thing that I just realized I forgot to do was to check gaia for .mozbrowser accesses...
Comment 45•12 years ago
|
||
Flags: in-testsuite+
Assignee | ||
Comment 46•12 years ago
|
||
So the failures there seem to be made up of test_focus_disabled.html which was just busted and has since been backed out and various mozbrowser stuff that's likely to be due to nsIMozBrowserFrame not being implemented in the new setup.
Assignee | ||
Comment 47•12 years ago
|
||
In Gaia, apps/browser/js/browser.js has a .mozbrowser set.
Should I just make that attribute non-chromeonly but conditioned on the "dom.mozBrowserFramesEnabled" pref or something else that would only expose it where it should be exposed?
For that matter, where should the nsIMozBrowserFrame stuff go? Should that be chromeonly, or do untrusted things need it? I suppose I could just query for all the uses in m-c and gaia if the answer is not known offhand...
Flags: needinfo?(justin.lebar+bug)
Assignee | ||
Comment 48•12 years ago
|
||
For what it's worth, as far as I can tell the only QI to nsIMozBrowserFrame in JS code is in a jsm.... at least in m-c and gaia.
Assignee | ||
Comment 49•12 years ago
|
||
Confirmed that just throwing appManifestURL on HTMLIFrameElement fixes those oranges from that try run that I could reproduce locally. Justin, do I need to expose any of the rest of nsIMozBrowserFrame to script?
Reporter | ||
Comment 50•12 years ago
|
||
(In reply to comment #49)
> Confirmed that just throwing appManifestURL on HTMLIFrameElement fixes those
> oranges from that try run that I could reproduce locally. Justin, do I need to
> expose any of the rest of nsIMozBrowserFrame to script?
Gah, I did see that interface but then I said to myself it doesn't have DOM in its name, so perhaps it's not meant to be exposed to js. Sorry for not fact checking that idea.
Assignee | ||
Comment 51•12 years ago
|
||
Well, it's not exposed by default. You have to explicitly QI to nsIMozBrowserFrame to get those members right now. [ChromeOnly] solves that problem, of course.
Comment 52•12 years ago
|
||
> Justin, do I need to expose any of the rest of nsIMozBrowserFrame to script?
To Chrome script? If the tests pass, you likely don't need to. So long as it's easy to add another attribute (seems so), I don't mind if we expose as little as we can get away with.
Flags: needinfo?(justin.lebar+bug)
Assignee | ||
Comment 53•12 years ago
|
||
OK. At this point this seems to be all green except for one thing: every single b2g test is red with this:
INFO - File "/builds/slave/test/build/venv/local/lib/python2.7/site-packages/marionette/marionette.py", line 290, in _handle_error
10:41:55 ERROR - raise JavascriptException(message=message, status=status, stacktrace=stacktrace)
10:41:55 ERROR - marionette.errors.JavascriptException: TypeError: currentAppFrame(...) is null at: app://system.gaiamobile.org/js/wrapper.js line: 17
10:41:56 ERROR - Return code: 1
I tried making mozbrowser not be ChromeOnly, but that doesn't change anything.
I also tried running b2g mochitests locally in a desktop b2g build. That seems to work fine....
Comment 54•12 years ago
|
||
That error is a bit odd to be happening in isolation. Perhaps another error is hiding earlier up in the log? We're pretty good about making them hard to find.
Assignee | ||
Comment 55•12 years ago
|
||
I didn't see anything obvious, but I'm not quite sure what to be looking for. There's a log at https://tbpl.mozilla.org/php/getParsedLog.php?id=20188914&tree=Try&full=1 if you're willing to take a look too...
So I tried pushing with HTMLIFrameElement still on XPCOM bindings but WebIDL quickstubs installed for the HTMLIFrameElement interface, all interfaces other than that one disabled in classinfo, and everything except appManifestURL nsIMozBrowserFrame marked noscript, to mimic as closely as I can the actual behavior with WebIDL. That run is green...
Comment 56•12 years ago
|
||
I don't see anything either. :-/
Assignee | ||
Comment 57•12 years ago
|
||
OK, I believe I know why this fails now.
The b2g code is firing events from a jsm on a content iframe, then has event listeners in the content that end up throwing. Right now the DOM error reporter sees those exceptions, sees that there is an XPCCallContext on the stack (from the XPCWN xray) and suppresses the exception.
With this patch, WebIDL xrays have no XPCCallContext, so the exception is actually reported from the event listener and the test harness sees an uncaught exception and kills the test run. This all happens during startup of the emulator, so it affects every single test.
Assignee | ||
Comment 58•12 years ago
|
||
Assignee | ||
Updated•12 years ago
|
Assignee: nobody → bzbarsky
Assignee | ||
Updated•12 years ago
|
Attachment #719127 -
Attachment is obsolete: true
Assignee | ||
Comment 59•12 years ago
|
||
Attachment #727755 -
Flags: review?(Ms2ger)
Assignee | ||
Updated•12 years ago
|
Attachment #724803 -
Attachment is obsolete: true
Assignee | ||
Updated•12 years ago
|
Whiteboard: [leave open] → [need review]
Comment 60•12 years ago
|
||
Comment on attachment 727755 [details] [diff] [review]
Part 4: Move HTMLIFrameElement to Web IDL bindings;
Review of attachment 727755 [details] [diff] [review]:
-----------------------------------------------------------------
::: content/html/content/src/HTMLIFrameElement.h
@@ +9,5 @@
> #include "nsGenericHTMLFrameElement.h"
> #include "nsIDOMHTMLIFrameElement.h"
> #include "nsIDOMGetSVGDocument.h"
>
> +class nsXULElement;
Why?
@@ +67,5 @@
> + void SetSrc(const nsAString& aSrc, ErrorResult& aError)
> + {
> + SetHTMLAttr(nsGkAtoms::src, aSrc, aError);
> + }
> + void GetName(DOMString& aName)
const, and some more
@@ +77,5 @@
> + SetHTMLAttr(nsGkAtoms::name, aName, aError);
> + }
> + nsDOMSettableTokenList* Sandbox()
> + {
> + return GetTokenList(nsGkAtoms::sandbox);
// We're implementing sandbox as a string for now, see bug 845057.
Drop this for now?
@@ +79,5 @@
> + nsDOMSettableTokenList* Sandbox()
> + {
> + return GetTokenList(nsGkAtoms::sandbox);
> + }
> + bool AllowFullscreen()
const
@@ +131,5 @@
> + SetHTMLAttr(nsGkAtoms::frameborder, aFrameBorder, aError);
> + }
> + void GetLongDesc(DOMString& aLongDesc)
> + {
> + GetHTMLAttr(nsGkAtoms::longdesc, aLongDesc);
This is a URI attribute currently.
@@ +157,5 @@
> + nsIDocument* GetSVGDocument()
> + {
> + return GetContentDocument();
> + }
> + bool Mozbrowser()
const
@@ +165,5 @@
> + void SetMozbrowser(bool aAllow, ErrorResult& aError)
> + {
> + SetHTMLBoolAttr(nsGkAtoms::mozbrowser, aAllow, aError);
> + }
> + using nsGenericHTMLFrameElement::SetMozbrowser;
Why?
@@ +173,5 @@
> protected:
> virtual void GetItemValueText(nsAString& text);
> virtual void SetItemValueText(const nsAString& text);
> +
> + virtual JSObject* WrapNode(JSContext *aCx, JSObject *aScope) MOZ_OVERRIDE;
* to the left
::: content/html/content/src/nsGenericHTMLFrameElement.h
@@ +5,5 @@
> * License, v. 2.0. If a copy of the MPL was not distributed with this file,
> * You can obtain one at http://mozilla.org/MPL/2.0/. */
>
> +#ifndef nsGenericHTMLFrameElement_h
> +#define nsGenericHTMLFrameElement_h
Heh.
Attachment #727755 -
Flags: review?(Ms2ger) → review+
Assignee | ||
Comment 61•12 years ago
|
||
> Why?
Not needed anymore. Removed.
> const, and some more
Can't do, because it makes the call from the binding ambiguous.
> Drop this for now?
Er, should be a GetHTMLAttr. Good catch.
> const
Done for AllowFullscreen, Mozbrowser.
> This is a URI attribute currently.
Good catch, fixed.
> Why?
Because otherwise I get warnings about hidden overloaded virtual functions.
> * to the left
Done.
Assignee | ||
Comment 62•12 years ago
|
||
Flags: in-testsuite+ → in-testsuite?
Whiteboard: [need review]
Target Milestone: --- → mozilla22
Comment 63•12 years ago
|
||
Status: NEW → RESOLVED
Closed: 12 years ago
Resolution: --- → FIXED
Updated•6 years ago
|
Component: DOM → DOM: Core & HTML
You need to log in
before you can comment on or make changes to this bug.
Description
•