Bug 370760 - Wrap calls to get content properties, and expand wrappers for theses. ChatZilla only. r=gijs

git-svn-id: svn://10.0.0.236/trunk@220709 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
silver%warwickcompsoc.co.uk 2007-02-22 10:33:23 +00:00
parent 44d037c5a2
commit f9f3af9dc5
3 changed files with 35 additions and 15 deletions

View File

@ -610,6 +610,9 @@ function getContentWindow(frame)
if (!frame || !("contentWindow" in frame)) if (!frame || !("contentWindow" in frame))
return false; return false;
// The "in" operator does not detect wrappedJSObject, so don't bother.
if (frame.contentWindow.wrappedJSObject)
return frame.contentWindow.wrappedJSObject;
return frame.contentWindow; return frame.contentWindow;
} }
catch (ex) catch (ex)
@ -619,6 +622,25 @@ function getContentWindow(frame)
} }
} }
function getContentDocument(frame)
{
try
{
if (!frame || !("contentDocument" in frame))
return false;
// The "in" operator does not detect wrappedJSObject, so don't bother.
if (frame.contentDocument.wrappedJSObject)
return frame.contentDocument.wrappedJSObject;
return frame.contentDocument;
}
catch (ex)
{
// throws exception is contentDocument is gone
return null;
}
}
function getPriv (priv) function getPriv (priv)
{ {
if (!jsenv.HAS_SECURITYMANAGER) if (!jsenv.HAS_SECURITYMANAGER)

View File

@ -1144,7 +1144,7 @@ function cmdSync(e)
var view = e.sourceObject; var view = e.sourceObject;
var window; var window;
if (("frame" in view) && view.frame) if (("frame" in view) && view.frame)
window = view.frame.contentWindow; window = getContentWindow(view.frame);
try try
{ {
@ -2212,7 +2212,7 @@ function cmdGotoURL(e)
if (e.url.search(/^x-cz-command:/i) == 0) if (e.url.search(/^x-cz-command:/i) == 0)
{ {
var ary = e.url.match(/^x-cz-command:(.*)$/i); var ary = e.url.match(/^x-cz-command:(.*)$/i);
e.sourceObject.frame.contentWindow.location.href = getContentWindow(e.sourceObject.frame).location.href =
"javascript:void(view.dispatch('" + decodeURI(ary[1]) + "', null, true))"; "javascript:void(view.dispatch('" + decodeURI(ary[1]) + "', null, true))";
return; return;
} }
@ -3025,10 +3025,9 @@ function cmdPref (e)
function cmdPrint(e) function cmdPrint(e)
{ {
if (("frame" in e.sourceObject) && e.sourceObject.frame && if (("frame" in e.sourceObject) && e.sourceObject.frame &&
("contentWindow" in e.sourceObject.frame) && getContentWindow(e.sourceObject.frame))
e.sourceObject.frame.contentWindow)
{ {
e.sourceObject.frame.contentWindow.print(); getContentWindow(e.sourceObject.frame).print();
} }
else else
{ {
@ -3504,7 +3503,7 @@ function cmdSave(e)
| nsIWBP.PERSIST_FLAGS_DONT_CHANGE_FILENAMES; | nsIWBP.PERSIST_FLAGS_DONT_CHANGE_FILENAMES;
// Set the document from the current view, and set a usable title // Set the document from the current view, and set a usable title
docToBeSaved = e.sourceObject.frame.contentDocument; docToBeSaved = getContentDocument(e.sourceObject.frame);
var headElement = docToBeSaved.getElementsByTagName("HEAD")[0]; var headElement = docToBeSaved.getElementsByTagName("HEAD")[0];
var titleElements = docToBeSaved.getElementsByTagName("title"); var titleElements = docToBeSaved.getElementsByTagName("title");
// Remove an existing title, there shouldn't be more than one. // Remove an existing title, there shouldn't be more than one.
@ -4225,7 +4224,7 @@ function cmdDCCDecline(e)
function cmdTextDirection(e) function cmdTextDirection(e)
{ {
var direction; var direction;
var sourceObject = e.sourceObject.frame.contentDocument.body; var sourceObject = getContentDocument(e.sourceObject.frame).body;
switch (e.dir) switch (e.dir)
{ {

View File

@ -644,8 +644,8 @@ function getFindData(e)
{ {
var findData = new nsFindInstData(); var findData = new nsFindInstData();
findData.browser = e.sourceObject.frame; findData.browser = e.sourceObject.frame;
findData.rootSearchWindow = e.sourceObject.frame.contentWindow; findData.rootSearchWindow = getContentWindow(e.sourceObject.frame);
findData.currentSearchWindow = e.sourceObject.frame.contentWindow; findData.currentSearchWindow = getContentWindow(e.sourceObject.frame);
/* Yay, evil hacks! findData.init doesn't care about the findService, it /* Yay, evil hacks! findData.init doesn't care about the findService, it
* gets option settings from webBrowserFind. As we want the wrap option *on* * gets option settings from webBrowserFind. As we want the wrap option *on*
@ -2876,12 +2876,11 @@ function setCurrentObject (obj)
// Input area should have the same direction as the output area // Input area should have the same direction as the output area
if (("frame" in client.currentObject) && if (("frame" in client.currentObject) &&
client.currentObject.frame && client.currentObject.frame &&
("contentDocument" in client.currentObject.frame) && getContentDocument(client.currentObject.frame) &&
client.currentObject.frame.contentDocument && ("body" in getContentDocument(client.currentObject.frame)) &&
("body" in client.currentObject.frame.contentDocument) && getContentDocument(client.currentObject.frame).body)
client.currentObject.frame.contentDocument.body)
{ {
var contentArea = client.currentObject.frame.contentDocument.body; var contentArea = getContentDocument(client.currentObject.frame).body;
client.input.setAttribute("dir", contentArea.getAttribute("dir")); client.input.setAttribute("dir", contentArea.getAttribute("dir"));
} }
client.input.focus(); client.input.focus();
@ -3255,7 +3254,7 @@ function syncOutputFrame(obj, nesting)
try try
{ {
if (("contentDocument" in iframe) && ("webProgress" in iframe)) if (getContentDocument(iframe) && ("webProgress" in iframe))
{ {
var url = obj.prefs["outputWindowURL"]; var url = obj.prefs["outputWindowURL"];
iframe.addProgressListener(client.progressListener, ALL); iframe.addProgressListener(client.progressListener, ALL);