blob: be4fcdb0b8f4031bf62629464953f6d9d7db0d15 [file] [log] [blame]
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
function TimelineModelShim() {
tracing.TimelineModel.apply(this, arguments);
}
TimelineModelShim.prototype = {
__proto__: tracing.TimelineModel.prototype,
invokeMethod: function(methodName, args) {
var sendToPython = function(obj) {
// We use sendJSON here because domAutomationController's send() chokes on
// large amounts of data. Inside of send() it converts the arg to JSON and
// invokes sendJSON. The JSON conversion is what fails. This way works
// around the bad code, but note that the recieving python converts from
// JSON before passing it back to the pyauto test.
window.domAutomationController.sendJSON(
JSON.stringify(obj)
);
};
var result;
try {
result = this[methodName].apply(this, JSON.parse(args));
} catch( e ) {
var ret = {
success: false,
message: 'Unspecified error',
};
// We'll try sending the entire exception. If that doesn't work, it's ok.
try {
ret.exception = JSON.stringify(e);
} catch(e2) {}
if( typeof(e) == 'string' || e instanceof String ) {
ret.message = e;
} else {
if( e.stack != undefined ) ret.stack = e.stack;
if( e.message != undefined ) ret.message = e.message;
}
sendToPython(ret);
throw e;
}
sendToPython({
success: true,
data: result
});
}
},
// This causes the PyAuto ExecuteJavascript call which executed this file to
// return.
window.domAutomationController.send('');