Skip to content
This repository has been archived by the owner on Feb 8, 2018. It is now read-only.

Commit

Permalink
Blah
Browse files Browse the repository at this point in the history
svn path=/trunk/moon-mp/; revision=122022
  • Loading branch information
abock committed Dec 23, 2008
1 parent 878c373 commit 7e68e56
Show file tree
Hide file tree
Showing 7 changed files with 230 additions and 72 deletions.
32 changes: 22 additions & 10 deletions content/moon-console.js
Original file line number Diff line number Diff line change
Expand Up @@ -57,9 +57,9 @@ var MoonConsole = {
return count;
},

_ObjDumpProperty: function (o, prop, invoke_getters, level, i, count, max_prop_len) {
var is_getter = !invoke_getters && o.__lookupGetter__ (prop);
var is_setter = o.__lookupSetter__ (prop);
_ObjDumpProperty: function (o, prop, invoke_getters, level, i, count, max_prop_len, stack) {
var is_getter = !invoke_getters && o.__lookupGetter__ && o.__lookupGetter__ (prop);
var is_setter = o.__lookupSetter__ && o.__lookupSetter__ (prop);
var eval_prop = null;

if (!is_getter && !is_setter) {
Expand Down Expand Up @@ -88,7 +88,7 @@ var MoonConsole = {
} else if (is_setter) {
MoonConsole.Write ("set (x)");
} else {
MoonConsole.ObjDump (eval_prop, invoke_getters, level + 1);
MoonConsole.ObjDump (eval_prop, invoke_getters, level + 1, stack);
}

if (i < count - 1) {
Expand All @@ -98,13 +98,17 @@ var MoonConsole = {
MoonConsole.WriteLine ();
},

ObjDump: function (o, invoke_getters, level) {
ObjDump: function (o, invoke_getters, level, stack) {
if (!invoke_getters) {
invoke_getters = false;
}

if (!level) {
level = 0;
}

if (!invoke_getters) {
invoke_getters = false;
if (!stack) {
stack = [];
}

var max_type_len = "function ()".length;
Expand All @@ -128,6 +132,14 @@ var MoonConsole = {
var obj_open_char = "{";
var obj_close_char = "}";

// Keep a stack of references to avoid recursively dumping; e.g.:
// var x = {}; x.self = x;
if (stack.indexOf (o) >= 0) {
MoonConsole.Write ("<object already dumped>");
break;
}
stack.push (o);

if (o instanceof Array) {
count = o.length;
obj_open_char = "[";
Expand All @@ -147,7 +159,7 @@ var MoonConsole = {
} else if (o instanceof Array || o_name == "[object Object]") {
MoonConsole.Write (obj_open_char);
} else {
var instanceof_str = o.constructor.name == "Object"
var instanceof_str = !o.constructor || o.constructor.name == "Object"
? "" : "[object " + o.constructor.name + "] ";
MoonConsole.Write (instanceof_str + "(" + o + ") {");
}
Expand All @@ -161,11 +173,11 @@ var MoonConsole = {

if (o instanceof Array) {
for (var i = 0; i < count; i++) {
MoonConsole._ObjDumpProperty (o, i, invoke_getters, level, i, count, 0);
MoonConsole._ObjDumpProperty (o, i, invoke_getters, level, i, count, 0, stack);
}
} else {
for (prop in o) {
MoonConsole._ObjDumpProperty (o, prop, invoke_getters, level, i++, count, max_prop_len);
MoonConsole._ObjDumpProperty (o, prop, invoke_getters, level, i++, count, max_prop_len, stack);
}
}

Expand Down
44 changes: 44 additions & 0 deletions content/moon-media-content-listener.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
function MoonMediaContentListener () {
}

MoonMediaContentListener.prototype = {

loadCookie: null,
parentContentListener: null,

QueryInterface: function (iid) {
if (iid.equals (Components.interfaces.nsIURIContentListener) ||
iid.equals (Components.interfaces.nsISupportsWeakReference) ||
iid.equals (Components.interfaces.nsISupports)) {
return this;
}

throw Components.results.NS_NOINTERFACE;
},

onStartURIOpen: function (uri) {
MoonConsole.Log (uri.spec);
var abort = false;

if(!abort && this.parentContentListener) {
abort = this.parentContentListener.onStartURIOpen (aURI);
}

return abort;
},

doContent: function (a,b,c,d) {
MoonConsole.Log ("doContent: " + a);
return false;
},

canHandleContent: function(a,b,c) {
MoonConsole.Log ("canHandleContent: " + a);
return false;
},

isPreferred: function (contentType, b) {
return MoonMediaExtension.SupportedMimeTypes.indexOf (contentType) >= 0;
}
}

67 changes: 59 additions & 8 deletions content/moon-media-extension.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,10 @@ var MoonMediaExtension = {

Initialize: function () {
window.removeEventListener ("load", MoonMediaExtension.Initialize, true);

var mime_editor = new MoonMimeEditor;
mime_editor.Initialize (MoonMediaExtension.SupportedMimeTypes);

var observer_service = Components.classes["@mozilla.org/observer-service;1"]
.getService (Components.interfaces.nsIObserverService);
observer_service.addObserver (MoonMediaExtension, "http-on-examine-response", false);

gBrowser.addEventListener ("load", MoonMediaExtension.OnDocumentLoaded, true);
gBrowser.addEventListener("PluginNotFound", function (event) {
Expand All @@ -32,19 +33,69 @@ var MoonMediaExtension = {
"possibly unsupported Firefox version: " + e);
}
}, true);

// gBrowser.addProgressListener (new MoonMediaWebProgressListener);

try {
var uriLoader = Components.classes["@mozilla.org/uriloader;1"].getService(Components.interfaces.nsIURILoader);
uriLoader.registerContentListener (new MoonMediaContentListener);

} catch (e) {
MoonConsole.ObjDump (e);
}
},
OnDocumentLoaded: function (event) {
if (!(event.originalTarget instanceof HTMLDocument)) {

observe: function (subject, topic, data) {
/*if (topic != "http-on-examine-response") {
return;
}

var http_channel = subject.QueryInterface (Components.interfaces.nsIHttpChannel);
var content_type = http_channel.getResponseHeader ("Content-Type");
var split_ofs = content_type.indexOf (";");
if (split_ofs >= 0) {
content_type = content_type.substring (0, split_ofs);
}
if (MoonMediaExtension.SupportedMimeTypes.indexOf (content_type) >= 0) {
var loaded_doc = null;
var loaded_win = null;
try {
var interface_requestor = http_channel.notificationCallbacks.QueryInterface (
Components.interfaces.nsIInterfaceRequestor);
loaded_win = interface_requestor.getInterface (Components.interfaces.nsIDOMWindow);
loaded_doc = MoonMediaExtension.FindRootDocument (loaded_win.document);
} catch (e) {
MoonConsole.Log ("nsIHttpChannel for is not bound to an nsIDOMWindow for URI: "
+ http_channel.URI.spec);
}
if (!loaded_doc) {
loaded_win = gBrowser.mCurrentBrowser;
loaded_doc = MoonMediaExtension.FindRootDocument (gBrowser.mCurrentBrowser.contentDocument);
}
loaded_win.stop ();
loaded_doc.body.innerHTML = http_channel.URI.spec;
}*/
},

FindRootDocument: function (in_doc) {
// Find the root document (walking up in case of frames)
var doc = event.originalTarget;
var doc = in_doc;
while (doc.defaultView.frameElement) {
doc = doc.defaultView.frameElement.ownerDocument;
}
return doc;
},

OnDocumentLoaded: function (event) {
if (!(event.originalTarget instanceof HTMLDocument)) {
return;
}

var doc = MoonMediaExtension.FindRootDocument (event.originalTarget);
var binder = null;

for (var i = 0, n = doc.embeds.length; i < n; i++) {
Expand Down
78 changes: 78 additions & 0 deletions content/moon-media-wpl.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
function MoonMediaWebProgressListener () {
}

MoonMediaWebProgressListener.prototype = {
QueryInterface: function (iid) {
if (iid.equals (Components.interfaces.nsIWebProgressListener) ||
iid.equals (Components.interfaces.nsISupportsWeakReference) ||
iid.equals (Components.interfaces.nsISupports)) {
return this;
}

throw Components.results.NS_NOINTERFACE;
},

onStateChange: function (webProgress, request, stateFlags, status) {
const wpl = Components.interfaces.nsIWebProgressListener;

try {
if ((stateFlags & wpl.STATE_STOP) != 0 &&
MoonMediaExtension.SupportedMimeTypes.indexOf (request.contentType) >= 0) {
this.InterceptMedia (request);
}
} catch (e) {
MoonConsole.Log ("Could not get contentType for nsIRequest");
}
},

InterceptMedia: function (request) {
var loaded_doc = null;
var loaded_win = null;

request.cancel (1);

try {
var interface_requestor = request.notificationCallbacks.QueryInterface (
Components.interfaces.nsIInterfaceRequestor);
loaded_win = interface_requestor.getInterface (Components.interfaces.nsIDOMWindow);
loaded_doc = MoonMediaExtension.FindRootDocument (loaded_win.document);
} catch (e) {
MoonConsole.Log ("nsIHttpChannel for is not bound to an nsIDOMWindow for URI: "
+ request.URI.spec);
}

if (!loaded_doc) {
loaded_win = gBrowser.mCurrentBrowser;
loaded_doc = MoonMediaExtension.FindRootDocument (gBrowser.mCurrentBrowser.contentDocument);
}

loaded_doc.body.innerHTML = request.URI.spec;
},

onStatusChange: function (webProgress, request, status, message) {
},

onLocationChange: function (webProgress, request, location) {
},

onProgressChange: function (webProgress, request, curSelfProgress, maxSelfProgress,
curTotalProgress, maxTotalProgress) {
},

onSecurityChange: function (webProgress, request, state) {
},

DumpState: function (state) {
const wpl = Components.interfaces.nsIWebProgressListener;
var states = [];
for (var prop in wpl) {
if (prop.substring (0, 5) == "STATE") {
if ((state & wpl[prop]) == wpl[prop]) {
states.push (prop);
}
}
}
MoonConsole.ObjDump (states);
}
}

2 changes: 1 addition & 1 deletion content/moon-media.xul
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@
<overlay id="moon-media-overlay"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<script type="application/x-javascript" src="moon-console.js"/>
<script type="application/x-javascript" src="moon-mime-editor.js"/>
<script type="application/x-javascript" src="moon-media-content-listener.js"/>
<script type="application/x-javascript" src="moon-media-extension.js"/>
</overlay>
50 changes: 0 additions & 50 deletions content/moon-mime-editor.js

This file was deleted.

Loading

0 comments on commit 7e68e56

Please sign in to comment.