Skip to content

Commit 2591620

Browse files
author
Thomas Grainger
committed
Create new wrapXCallback methods that delegate to old callbacks
Angular and react-native data callbacks did not properly delegate to original callbacks. (Forgot to return the truthy return value of the callback)
1 parent f162c9e commit 2591620

File tree

3 files changed

+44
-18
lines changed

3 files changed

+44
-18
lines changed

plugins/angular.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,8 @@ function angularPlugin(Raven, angular) {
3838
.provider('Raven', RavenProvider)
3939
.config(['$provide', ExceptionHandlerProvider]);
4040

41-
Raven.setDataCallback(function(data, original) {
42-
angularPlugin._normalizeData(data);
43-
44-
original && original(data);
41+
Raven.wrapDataCallback(function(data) {
42+
return angularPlugin._normalizeData(data);
4543
});
4644
}
4745

@@ -62,6 +60,8 @@ angularPlugin._normalizeData = function (data) {
6260
data.extra.angularDocs = matches[3].substr(0, 250);
6361
}
6462
}
63+
64+
return data;
6565
};
6666

6767
module.exports = angularPlugin;

plugins/react-native.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,8 @@ function reactNativePlugin(Raven, options) {
6060
Raven.setTransport(reactNativePlugin._transport);
6161

6262
// Use data callback to strip device-specific paths from stack traces
63-
Raven.setDataCallback(function(data) {
64-
reactNativePlugin._normalizeData(data, options.pathStrip)
63+
Raven.wrapDataCallback(function(data) {
64+
return reactNativePlugin._normalizeData(data, options.pathStrip);
6565
});
6666

6767
// Check for a previously persisted payload, and report it.
@@ -224,6 +224,7 @@ reactNativePlugin._normalizeData = function (data, pathStripRe) {
224224
frame.filename = normalizeUrl(frame.filename, pathStripRe);
225225
});
226226
}
227+
return data;
227228
};
228229

229230
module.exports = reactNativePlugin;

src/raven.js

Lines changed: 37 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,25 @@ var _window = typeof window !== 'undefined' ? window
2626
var _document = _window.document;
2727
var _navigator = _window.navigator;
2828

29+
30+
function keepOriginalCallback(original, callback) {
31+
return isFunction(callback) ?
32+
function (data) { return callback(data, original) } :
33+
callback;
34+
}
35+
36+
function wrappedCallback(callback) {
37+
function dataCallback(data, original) {
38+
var normalizedData = callback(data) || data;
39+
if (original) {
40+
return original(normalizedData) || normalizedData;
41+
}
42+
return normalizedData;
43+
}
44+
45+
return dataCallback;
46+
}
47+
2948
// First, check for JSON support
3049
// If there is no JSON, we no-op the core features of Raven
3150
// since JSON is required to encode the payload
@@ -550,13 +569,15 @@ Raven.prototype = {
550569
*/
551570
setDataCallback: function(callback) {
552571
var original = this._globalOptions.dataCallback;
553-
this._globalOptions.dataCallback = isFunction(callback)
554-
? function (data) { return callback(data, original); }
555-
: callback;
556-
572+
this._globalOptions.dataCallback =
573+
keepOriginalCallback(original, callback);
557574
return this;
558575
},
559576

577+
wrapDataCallback: function(callback) {
578+
return this.setDataCallback(wrappedCallback(callback));
579+
},
580+
560581
/*
561582
* Set the breadcrumbCallback option
562583
*
@@ -566,13 +587,15 @@ Raven.prototype = {
566587
*/
567588
setBreadcrumbCallback: function(callback) {
568589
var original = this._globalOptions.breadcrumbCallback;
569-
this._globalOptions.breadcrumbCallback = isFunction(callback)
570-
? function (data) { return callback(data, original); }
571-
: callback;
572-
590+
this._globalOptions.breadcrumbCallback =
591+
keepOriginalCallback(original, callback);
573592
return this;
574593
},
575594

595+
wrapBreadcrumbCallback: function(callback) {
596+
return this.setBreadcrumbCallback(wrappedCallback(callback));
597+
},
598+
576599
/*
577600
* Set the shouldSendCallback option
578601
*
@@ -582,13 +605,15 @@ Raven.prototype = {
582605
*/
583606
setShouldSendCallback: function(callback) {
584607
var original = this._globalOptions.shouldSendCallback;
585-
this._globalOptions.shouldSendCallback = isFunction(callback)
586-
? function (data) { return callback(data, original); }
587-
: callback;
588-
608+
this._globalOptions.shouldSendCallback =
609+
keepOriginalCallback(original, callback);
589610
return this;
590611
},
591612

613+
wrapShouldSendCallback: function(callback) {
614+
return this.setShouldSendCallback(wrappedCallback(callback));
615+
},
616+
592617
/**
593618
* Override the default HTTP transport mechanism that transmits data
594619
* to the Sentry server.

0 commit comments

Comments
 (0)