Closed Bug 54013 Opened 24 years ago Closed 24 years ago

embedding widget broken because chrome never finishes loading

Categories

(Core Graveyard :: Embedding: GTK Widget, defect, P3)

x86
Linux
defect

Tracking

(Not tracked)

RESOLVED FIXED

People

(Reporter: blizzard, Assigned: blizzard)

Details

Attachments

(7 files)

There's a small chunk of chrome that is loaded in the gtk embedding widget so
that we can scroll using the mozilla key bindings and can hook up to key events.
 However, some time in the last couple of weeks it's been broken by some random
checkin.

Here is the file in question:

http://lxr.mozilla.org/seamonkey/source/embedding/browser/chrome/content/simple-shell.xul

It's pretty simple as far as XUL goes.  I added some debugging code to the
embedding widget to track state changes when it is loading chrome and related
documents and here's what I found:

[blizzard@totally-bodacious bin]$ ./TestGtkEmbed
new_gtk_browser
        menu bar
        tool bar
        location bar
        status bar
Type Manifest File: /home/blizzard/src/mozilla0.9/build/dist/bin/components/xpti
.dat
nsNativeComponentLoader: autoregistering begins.
nsNativeComponentLoader: autoregistering succeeded
nNCL: registering deferred (0)
GFX: dpi=96 t2p=0.0666667 p2t=15 depth=16
WEBSHELL+ = 1
WARNING: chrome: failed to get base url for chrome://embedding/browser/content/s
imple-shell.xul -- using wacky default, file ../../../../mozilla/rdf/chrome/src/
nsChromeRegistry.cpp, line 515
chrome://embedding/browser/content/simple-shell.xul start request doc network
chrome://communicator/content/directory/directory.xul start request
Note: verifyreflow is disabled
chrome://communicator/skin/communicator.css start request
chrome://communicator/content/directory/directory.xul stop request
chrome://global/skin/global.css start request
chrome://communicator/skin/box.css start request
chrome://communicator/skin/button.css start request
chrome://communicator/skin/brand.css start request
chrome://communicator/skin/menubutton.css start request
chrome://communicator/skin/formatting.css start request
chrome://communicator/skin/toolbar.css start request
chrome://communicator/skin/search-widgets.css start request
chrome://communicator/skin/communicator.css stop request
chrome://global/locale/intl.css start request
chrome://global/skin/box.css start request
chrome://global/skin/button.css start request
chrome://global/skin/checkbox.css start request
chrome://global/skin/radio.css start request
chrome://global/skin/tree.css start request
chrome://global/skin/splitter.css start request
chrome://global/skin/menubutton.css start request
chrome://global/skin/menulist.css start request
chrome://global/skin/menu.css start request
chrome://global/skin/formatting.css start request
chrome://global/skin/textfield.css start request
chrome://global/skin/tabcontrol.css start request
chrome://global/skin/toolbar.css start request
chrome://global/skin/colorpicker.css start request
chrome://global/skin/global.css stop request
chrome://communicator/skin/box.css stop request
chrome://communicator/skin/button.css stop request
chrome://communicator/skin/brand.css stop request
chrome://communicator/skin/menubutton.css stop request
chrome://communicator/skin/formatting.css stop request
chrome://communicator/skin/toolbar.css stop request
chrome://communicator/skin/search-widgets.css stop request
chrome://global/locale/intl.css stop request
chrome://global/skin/box.css stop request
chrome://global/skin/button.css stop request
chrome://global/skin/checkbox.css stop request
chrome://global/skin/radio.css stop request
chrome://global/skin/tree.css stop request
chrome://global/skin/splitter.css stop request
chrome://global/skin/menubutton.css stop request
chrome://global/skin/menulist.css stop request
chrome://global/skin/menu.css stop request
chrome://global/skin/formatting.css stop request
chrome://global/skin/textfield.css stop request
chrome://global/skin/tabcontrol.css stop request
chrome://global/skin/toolbar.css stop request
Note: styleverifytree is disabled
chrome://communicator/skin/directory/directory.css start request
chrome://global/skin/colorpicker.css stop request
about:xul-master-placeholder start request
chrome://communicator/content/directory/directory.js start request
chrome://communicator/skin/directory/directory.css stop request
WARNING: waaah!, file ../../../../mozilla/rdf/content/src/nsXULPrototypeDocument
.cpp, line 523
JavaScript strict warning:
chrome://communicator/content/directory/directory.js line 261: function OnClick
does not always return a value

JavaScript error:
chrome://communicator/content/directory/directory.js line 65: window._content ha
s no properties

chrome://global/content/treeBindings.xml start request
Note: frameverifytree is disabled
about:xul-master-placeholder stop request
chrome://communicator/content/directory/directory.js stop request
chrome://global/skin/treeBindings.xml start request
chrome://global/content/treeBindings.xml stop request
chrome://global/skin/sortAscending.gif start request
chrome://global/skin/treeBindings.xml stop request
chrome://global/skin/sortAscending.gif stop request

If you look at this you can see that it never finishes loading the embedding XUL
file.  Also, directory.js requires appCores.  Yay.

I need help with this.
Didn't you know?? Any non jar external package is horked.

SNAFU . . .

I have been trying to load external packages since friday.
With some direct rdf hacking I can actually load the xul but not the css.

I thought it was just me.  ;-)

--pete

Failure begins here:

WARNING: chrome: failed to get base url for chrome://embedding/browser/content/s
imple-shell.xul

It's not getting the baseURL which is defined in all-packages.rdf

If you manually edit the rdf file you will probably be able to get it going. 

adding myself to cc
Ok, i got a window to launch.

I edited all-packages.rdf

 <RDF:Description about="urn:mozilla:package:embed">
    <NS623:baseURL>resource:/chrome/embed/content/browser/</NS623:baseURL>
    <NS623:locType>install</NS623:locType>
    <NS623:displayName>Embed</NS623:displayName>
    <NS623:author>mozilla.org</NS623:author>
    <NS623:name>embed</NS623:name>
  </RDF:Description>
  <RDF:Seq about="urn:mozilla:package:root">
    <RDF:li resource="urn:mozilla:package:editor"/>
    <RDF:li resource="urn:mozilla:package:navigator"/>
    <RDF:li resource="urn:mozilla:package:communicator"/>
    <RDF:li resource="urn:mozilla:package:global"/>
    <RDF:li resource="urn:mozilla:package:messenger"/>
    <RDF:li resource="urn:mozilla:package:chatzilla"/>
    <RDF:li resource="urn:mozilla:package:theme_builder"/>
    <RDF:li resource="urn:mozilla:package:embed"/>
  </RDF:Seq>

and then i commented out the reference in mini-nav.xul

<!--
<?xml-stylesheet href="chrome://embedding/browser/skin/embedding.css"
type="text/css"?>
-->

and i get a small window to launch by doing this:

./mozilla -chrome chrome://embed/content/mini-nav.xul

--pete
Ok, I've been playing with my jar.mn file and trying to add a contents.rdf file
to the embedding code with little success.  The first thing that I did was add a
contents.rdf that adds the right namespace for the embed package and that seems
to work, at least somewhat.  I also had to add the simple-shell.xul and css file
to the jar.mn file since that was left out.

I don't seem to have the paths quite right for everything yet since it doesn't
ever load.  Help.
OK, trying to follow warren's jar packaging 101 I added the following things:

a contents.rdf:

<?xml version="1.0"?>
<RDF:RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
         xmlns:chrome="http://www.mozilla.org/rdf/chrome#">

  <!-- list all the packages being supplied by this jar -->
  <RDF:Seq about="urn:mozilla:package:root">
    <RDF:li resource="urn:mozilla:package:embed"/>
  </RDF:Seq>

  <!-- package information -->
  <RDF:Description about="urn:mozilla:package:embed"
        chrome:displayName="Embed"
        chrome:author="mozilla.org"
        chrome:name="embed">
  </RDF:Description>

</RDF:RDF>

added the following to the jar.mn file:

content/embed/simple-shell.xul (content/simple-shell.xul)
content/contents.rdf (content/contents.rdf)
skin/modern/embed/simple-shell.xul (skin/simple-shell.css)

but it still doesn't work.  I still get:

WARNING: chrome: failed to get base url for
chrome://embed/content/simple-shell.xul -- using wacky default, file
../../../../mozilla/rdf/chrome/src/nsChromeRegistry.cpp, line 515

the url I try to load is:

chrome://embed/content/simple-shell.xul

any ideas, warren?
I ran into the same kind of problem with XMLterm on Friday. The error message
was "window._content has no properties" etc, and mozilla would just hang. In my
case, all of the errors could be traced back to misplaced CSS files in the new
chrome directory structure. I followed the chatzilla example, and fixed up my
jar.mn and content.rdf files and finally everything was working again. I had to
insert some code in rdf/chrome/src/nsChromeProtocolHandler::NewChannel to print
out exactly how chrome: URLs were being resolved to jar: URLs to sort this out.

You can look at extensions/chatzilla or extensions/xmlterm for a working set of
chrome files for components. I also found that I had to provide CSS files for
both skin/modern and skin/classic separately. Finally, I ended up moving all my
CSS files to the chrome content directory, as a temporary workaround. I'll
revisit this once my understanding of skin switching improves!
Don't you want your path to be content/embed/contents.rdf, not 
content/contents.rdf?
Ok, after looking at svn's checkins ( thanks! ) I've got this now:

[blizzard@totally-bodacious bin]$ unzip -l chrome/embed.jar
Archive:  chrome/embed.jar
  Length     Date   Time    Name
 --------    ----   ----    ----
      543  09-25-00 17:43   content/embed/contents.rdf
     4738  09-13-00 19:50   content/embed/mini-nav.js
     1708  09-25-00 17:45   content/embed/simple-shell.xul
      845  06-30-00 08:25   content/embed/back.gif
      845  06-30-00 08:25   content/embed/forward.gif
      844  06-30-00 08:25   content/embed/reload.gif
      843  06-30-00 08:25   content/embed/stop.gif
      811  08-18-00 10:44   locale/en-US/embed/embedding.dtd
      786  09-25-00 17:56   locale/en-US/embed/contents.rdf
     1459  06-30-00 08:25   content/embed/embedding.css
     1005  09-25-00 16:32   content/embed/simple-shell.css
      744  09-25-00 17:44   skin/modern/embed/contents.rdf

however, it still can't find the .xul file.

WARNING: chrome: failed to get base url for
chrome://embed/content/simple-shell.xul -- using wacky default, file
../../../../mozilla/rdf/chrome/src/nsChromeRegistry.cpp, line 515

Here's my contents.rdf for the the content directory:

<?xml version="1.0"?>
<RDF:RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
         xmlns:chrome="http://www.mozilla.org/rdf/chrome#">

  <!-- list all the packages being supplied by this jar -->
  <RDF:Seq about="urn:mozilla:package:root">
    <RDF:li resource="urn:mozilla:package:embed"/>
  </RDF:Seq>

  <!-- xmlterm package information -->
  <RDF:Description about="urn:mozilla:package:embed"
        chrome:displayName="Embed"
        chrome:author="mozilla.org"
        chrome:name="embed">
  </RDF:Description>

</RDF:RDF>

Is there possibly some cruft in the Makefile.in that's causing this or something?
Ok, I think I have this working again now.  I'll post patches and extra needed
files in a few mins.
Looking at the last few lines of embedding/browser/chrome/Makefile.in,  you
don't seem to registering the chrome for the embed package. Shouldn't the last
three lines be 
         @$(REGCHROME) content embed embed.jar; \
         $(REGCHROME) skin modern/embed embed.jar; \
         $(REGCHROME) locale en-US/embed embed.jar

You can also look at the last few lines of dist/bin/chrome/installed-chrome.txt
to check if your chrome actually got registered when you do "make chrome"

Looks like you are putting your CSS files in the content area, like I did, in
which case make sure you change the CSS URL in the XUL file to
//embed/content/...
I don't know whether this is a good idea, but I did it because mozilla was
looking for skin/classic and kept hanging when I compiled the Sep. 22 tarball.
When mozilla doesn't find a skin for a particular package, it should default to
skin/modern or something like that. It doesn't seem to be happening right now.
Attached patch patchSplinter Review
Attached file tar of contents.rdf
Yeah, after adding checks to the chrome loader I saw that it was still trying to
load it from the wrong place.  I found the bad commands in the makefile that
were adding it to the wrong package.  Can I get someone to review these changes?
 I'd like to get it into both the stable branch and the tip.
Status: NEW → ASSIGNED
In your patch, the gif files are in content/embed and the css files are in
skin/modern/embed. If skin/modern works for you, I would say put all the skin
stuff (gif+css) in skin/modern/embed directory of the jar. Changing mozilla
skins shouldn't affect the embedding stuf (like it did xmlterm). With this
change, I'd be willing to review your code as a casual hacker, but not as a
chrome expert.
Actually, I just moved it to the content directory since it really isn't skin
dependent in any way.  It's just a window with a content area.  I'll attach a
new patch here.
Attached patch patch2Splinter Review
have an r=dougt
Keywords: nsbeta3
Attached patch patch3Splinter Review
Attached patch patch4Splinter Review
Attached file contents.rdf files
Ok, the last two uploads are my most recent changes.  Anyone want to review them?
I'm not up on $(REGCHROME) usage, so someone else (hyatt? warren?) will have to
review that.

In the patch4 attachment, scc@mozilla.org should comment on
 
-mChromeLocation.AssignWithConversion("chrome://embedding/browser/content/simple-shell.xul");
+mChromeLocation.AssignWithConversion("chrome://embed/content/simple-shell.xul");

Wouldn't NS_LITERAL_STRING be better here?

/be
Hi, the patches look reasonable to me. Can you just ensure that you have fixed 
up mini-nav so that it works too, such as from the command line, e.g.

mozilla -chrome chrome://embed/content/mini-nav.xul
Ok, I've got changes in my local tree that get mini-nav.xul at least to load.
It doesn't work on the tip, by the way.

However, it gets tons + tons of errors when I try and use the text area:

WEBSHELL+ = 3
Enabling Quirk StyleSheet
JavaScript strict warning:
 line 84: reference to undefined property me.noDirectMatch

JavaScript strict warning:
 line 154: reference to undefined property me.ignoreInputEvent

JavaScript strict warning:
 line 79: reference to undefined property me.menuOpen

etc...

am I missing the include of a JS file somewhere?
Ok, I think I've got this pretty much working except for the fact that the
onload handler isn't being fired.  This looks like a bug somewhere else, though...
Blizzard, these js warnings are ok.

We are running in strict mode these days to clean up sloppy js.

--pete
pete, have you seen other places where the onload handler isn't being fired when
you have chrome loaded from the command line?
Nope, all my packagesuse an onload hanldler on startup w/ no probs.

What happens when you put a dump in there?

onload="dump('testing onload handler\n\n');"

What errors are you getting?

--pete
Hi Chris, I'm not too concerned if mini-nav.xul is giving JS warnings as long as
it is working with the updated chrome paths. Thanks.
This is really strange.  I've narrowed the onload handler not being called
because of the inclusion of this in the embedding.css style sheet:

@import url(chrome://navigator/skin/);

if I remove that and put this directive in the mini-nav.xul file:

<?xml-stylesheet href="chrome://embed/content/embedding.css" type="text/css"?>
<?xml-stylesheet href="chrome://navigator/skin/" type="text/css"?>

then it loads but with the navigator buttons ( which it shouldn't. )  Also, I've
discovered that if I put the navigator/skin style sheet before the embedding.css
that the onload handler doesn't fire.

Help me obi-hyatt-wan.  You're my only hope.
Attached patch patch5Splinter Review
This is exactly the same problem i am having right now!

Your skin path is not being registered.

Vote on this bug:

http://bugzilla.mozilla.org/show_bug.cgi?id=54904

--pete
The latest patch works.  It doesn't use the embedding.css list items but it does
browse.  I also fixed the warnings I could find and brought the onStatus crap up
to date.  Can I check this in now?
Yes, Ive tried the latest patch and it works for me.  Please check it in!
It looks right to me, too, Chris.  a=scc, if that's what you need.

Thanks, scc.  Fix checked in ( finally! )
Status: ASSIGNED → RESOLVED
Closed: 24 years ago
Resolution: --- → FIXED
Product: Core → Core Graveyard
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: