I got it! I looked at how the Browser plugin worked to see what I missed.
The sollution appears to be using the instanceProto.OnCreate to determine the scope of self. (I am still not entirely sure how this works, but I'll keep learning)
On top of that I used an event to fire the condition to the likeness of how the Browser plugin handles these kinds of things.
Below are the relevant functions how they are implemented now:
instanceProto.onCreate = function()
{
var self = this;
window.addEventListener("startGame", function () {
self.runtime.trigger(cr.plugins_.SessionData.prototype.cnds.OnExternalGameStart, self);
});
}
pluginProto.startGame = function()
{
console.log("startGame request recieved");
var event = new CustomEvent("startGame");
window.dispatchEvent(event);
}
Cnds.prototype.OnExternalGameStart = function()
{
console.log("Trigger called");
return true;
}