| Index: chrome/test/data/extensions/api_test/bindings/override_gin_define.html
|
| diff --git a/chrome/test/data/extensions/api_test/bindings/override_gin_define.html b/chrome/test/data/extensions/api_test/bindings/override_gin_define.html
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..3aaf8eebf58c593c5d811f10dad775611d606dbc
|
| --- /dev/null
|
| +++ b/chrome/test/data/extensions/api_test/bindings/override_gin_define.html
|
| @@ -0,0 +1,69 @@
|
| +<!doctype html>
|
| +<html>
|
| +<body>
|
| +<span id="status"></span>
|
| +</body>
|
| +<script>
|
| +var error = '';
|
| +var addError = function(newError) {
|
| + error += newError;
|
| + document.getElementById('status').textContent = error;
|
| +};
|
| +
|
| +var succeed = function() {
|
| + if (error != '')
|
| + return; // Don't overwrite an existing error.
|
| + document.getElementById('status').textContent = 'success';
|
| +}
|
| +
|
| +// Repro from crbug.com/549986.
|
| +Object.prototype.__defineSetter__('define', function(v) {
|
| + if (typeof v == 'function') {
|
| + addError('Leaked gin define');
|
| + leakedDefine = v;
|
| + }
|
| + Object.defineProperty(this, 'define', {value: v});
|
| +});
|
| +
|
| +var leakedBinding;
|
| +Object.defineProperty(Object.prototype, 'create', {set: function(v) {
|
| + if (typeof(v) == 'function') {
|
| + Object.defineProperty(this, 'create', {value: function(name) {
|
| + result = v(name);
|
| + if (name == 'runtime') {
|
| + try {
|
| + leakedDefine('foo', ['test'], function(){} );
|
| + } catch (e) { }
|
| + } else if (name == 'test') {
|
| + addError('Leaked test');
|
| + leakedBinding = result;
|
| + }
|
| + return result;
|
| + }, configurable: true});
|
| + }
|
| +}});
|
| +
|
| +// Bindings are lazily initialized. Poke it.
|
| +chrome.runtime;
|
| +// If the runtime bindings aren't created, we didn't test anything.
|
| +if (!chrome.runtime)
|
| + addError('chrome.runtime was not created.\n');
|
| +
|
| +if (leakedBinding) {
|
| + leakedFunctions = {};
|
| + leakedBinding.customHooks_[0](
|
| + {apiFunctions: {setHandleRequest: function(name, fun) {
|
| + leakedFunctions[name] = fun;
|
| + } }, compiledApi: {} });
|
| +
|
| + leakedFunctions.runWithNativesEnabled(function() {
|
| + addError('Calling activityLogger.LogEvent');
|
| + leakedFunctions.getModuleSystem(window).requireNative('activityLogger')
|
| + .LogEvent('', '', 0xDEADBAD);
|
| + });
|
| +}
|
| +
|
| +// All's well.
|
| +succeed();
|
| +</script>
|
| +</html>
|
|
|