Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
77 commits
Select commit Hold shift + click to select a range
468abd9
collection: callback error handling
adinauer Sep 22, 2026
28af8f2
fix(core): [Callback Errors 1] Report callback failures
adinauer Sep 22, 2026
d689526
fix(core): [Callback Errors 2] Drop failed processor data
adinauer Sep 22, 2026
fa3ca45
fix(core): [Callback Errors 3] Drop failed breadcrumbs
adinauer Sep 22, 2026
434e1db
ref(core): [Callback Errors 2] Mark SDK-owned event processors
adinauer Sep 24, 2026
8b3c3fa
Merge SDK processor marker into processor callback handling
adinauer Sep 24, 2026
aa17ea5
Merge processor stack update into breadcrumb callback handling
adinauer Sep 24, 2026
6d07426
fix(core): [Callback Errors 3] Preserve SDK processor data
adinauer Sep 24, 2026
8a06fde
chore(core): Sync processor fixes into breadcrumb stack
adinauer Sep 24, 2026
9320f73
fix(core): [Callback Errors 5] Handle tracesSampler failures
adinauer Sep 24, 2026
60d1e15
changelog
adinauer Sep 24, 2026
2c84527
fix(core): [Callback Errors 6] Handle profilesSampler failures
adinauer Sep 24, 2026
aa15164
changelog
adinauer Sep 24, 2026
49f8b9c
fix(core): [Callback Errors 7] Handle replay sampling failures
adinauer Sep 24, 2026
b62c094
changelog
adinauer Sep 24, 2026
efb5dfb
fix(core): [Callback Errors 8] Report dropped profiles
adinauer Sep 25, 2026
7a471df
changelog
adinauer Sep 25, 2026
8845736
fix(integrations): [Callback Errors 9] Guard custom callbacks
adinauer Sep 25, 2026
44ed7c6
changelog
adinauer Sep 25, 2026
fcbf95f
fix(core): Drop transactions when tracesSampler fails
adinauer Sep 25, 2026
154d94e
fix(core): Sync trace sampler handling into profile sampling
adinauer Sep 25, 2026
d11680e
chore: Sync sampler fixes into replay sampling branch
adinauer Sep 25, 2026
425a6b1
chore: Sync sampler fixes into profile accounting branch
adinauer Sep 25, 2026
835c0d2
chore: Sync sampler fixes into custom callback branch
adinauer Sep 25, 2026
2a38eeb
fix(integrations): Report beforeSpan callback losses
adinauer Sep 25, 2026
0414429
docs(core): Document SDK backfilling processor marker
adinauer Oct 5, 2026
a2b4847
fix: Report profiles dropped with transactions
adinauer Oct 8, 2026
9ef9efd
Merge pull request #6141 from getsentry/fix/callback-error-handling-d…
adinauer Oct 8, 2026
518d48a
fix(core): Report replay sampling callback errors
adinauer Oct 8, 2026
7fd012e
chore: Merge main into callback error stack
adinauer Oct 8, 2026
4916a15
chore: Merge callback error base into processor marker
adinauer Oct 8, 2026
38bf38c
chore: Merge processor marker into event processor handling
adinauer Oct 8, 2026
4d44b53
chore: Merge event processor handling into breadcrumbs
adinauer Oct 8, 2026
15cc695
chore: Merge breadcrumb handling into trace sampling
adinauer Oct 8, 2026
97cd7e2
chore: Merge trace sampling into profile sampling
adinauer Oct 8, 2026
287418b
chore: Merge profile sampling into replay sampling
adinauer Oct 8, 2026
92968ab
chore: Merge replay sampling into profile accounting
adinauer Oct 8, 2026
e87fddf
chore: Merge profile accounting into custom callbacks
adinauer Oct 8, 2026
0b922a6
Merge pull request #6162 from getsentry/fix/callback-error-handling-p…
adinauer Oct 8, 2026
dea8dbc
Merge pull request #6142 from getsentry/fix/callback-error-handling-e…
adinauer Oct 8, 2026
64c1c55
Merge pull request #6167 from getsentry/fix/callback-error-handling-c…
adinauer Oct 8, 2026
75338f5
Merge pull request #6143 from getsentry/fix/callback-error-handling-b…
adinauer Oct 8, 2026
b692e97
Merge pull request #6163 from getsentry/fix/callback-error-handling-t…
adinauer Oct 8, 2026
5b0d221
Merge pull request #6164 from getsentry/fix/callback-error-handling-p…
adinauer Oct 8, 2026
136073f
Merge pull request #6165 from getsentry/fix/callback-error-handling-r…
adinauer Oct 8, 2026
dfb67ed
Merge pull request #6166 from getsentry/fix/callback-error-handling-p…
adinauer Oct 8, 2026
39ac340
fix(apollo5): Handle beforeSpan callback failures
adinauer Oct 9, 2026
754ace3
changelog
adinauer Oct 9, 2026
c74fa58
fix(android): Handle feedback configurator failures
adinauer Oct 9, 2026
6f75a53
changelog
adinauer Oct 9, 2026
805d7ea
fix(spring): Handle user provider failures
adinauer Oct 9, 2026
22bc0e6
changelog
adinauer Oct 9, 2026
49e2940
fix(spring): Handle transaction name provider failures
adinauer Oct 9, 2026
109d07e
changelog
adinauer Oct 9, 2026
92e9ef5
test(apollo): Fix callback test lint violations
adinauer Oct 9, 2026
77b9784
Merge branch 'fix/callback-error-handling' into fix/callback-error-ha…
adinauer Oct 9, 2026
6ecd2a9
Merge branch 'fix/callback-error-handling' into fix/callback-error-ha…
adinauer Oct 9, 2026
35555aa
Merge branch 'fix/callback-error-handling' into fix/callback-error-ha…
adinauer Oct 9, 2026
37872d9
Merge branch 'fix/callback-error-handling' into fix/callback-error-ha…
adinauer Oct 9, 2026
db0ed76
Merge pull request #6238 from getsentry/fix/callback-error-handling-a…
adinauer Oct 9, 2026
27184c6
fix(spring): Include user provider name in error log
adinauer Oct 9, 2026
5c639a8
Merge branch 'fix/callback-error-handling' into fix/callback-error-ha…
adinauer Oct 9, 2026
84e8b86
Merge pull request #6240 from getsentry/fix/callback-error-handling-s…
adinauer Oct 9, 2026
e32efe0
test(android): Verify configurator runs after configuration failure
adinauer Oct 13, 2026
08377ad
test(android): Verify configurator propagates fatal errors
adinauer Oct 13, 2026
2afa056
Merge branch 'fix/callback-error-handling' into fix/callback-error-ha…
adinauer Oct 13, 2026
c381657
Merge branch 'fix/callback-error-handling' into fix/callback-error-ha…
adinauer Oct 13, 2026
155fa5a
Merge pull request #6239 from getsentry/fix/callback-error-handling-u…
adinauer Oct 13, 2026
bec3873
Merge branch 'fix/callback-error-handling' into fix/callback-error-ha…
adinauer Oct 13, 2026
6dffaa7
Merge pull request #6241 from getsentry/fix/callback-error-handling-s…
adinauer Oct 13, 2026
13094aa
Merge branch 'main' into fix/callback-error-handling
adinauer Oct 13, 2026
6e59919
docs(changelog): Consolidate callback error fixes
adinauer Oct 13, 2026
cda00a7
fix(callbacks): Handle nonfatal callback throwables
adinauer Oct 13, 2026
dea4dd8
Merge remote-tracking branch 'origin/fix/callback-error-handling' int…
adinauer Oct 13, 2026
d04cc24
changelog
adinauer Oct 13, 2026
55fd40d
fix(callbacks): Preserve Apollo 2 error handling
adinauer Oct 13, 2026
dea9190
fix(callbacks): [Callback Errors 10] Handle nonfatal throwables (#6251)
adinauer Oct 13, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,23 @@

## Unreleased

### Fixes

- Fix SDK callback error handling ([#6140](https://github.com/getsentry/sentry-java/pull/6140))
- Drop telemetry when a `beforeSend*` callback throws and report it using `DiscardReason.CALLBACK_ERROR`.
- Drop transactions when `tracesSampler` throws instead of inheriting the parent sampling decision or falling back to `tracesSampleRate` ([#6163](https://github.com/getsentry/sentry-java/pull/6163)).
- Drop spans when `beforeSpan` throws without disrupting requests, covering OkHttp, OpenFeign, GraphQL, Ktor, and Apollo—including Apollo 5 ([#6167](https://github.com/getsentry/sentry-java/pull/6167), [#6238](https://github.com/getsentry/sentry-java/pull/6238)).
- Drop telemetry and record `callback_error` when a customer event processor throws instead of continuing with a potentially partially processed item. SDK-owned processor failures are logged and processing continues.
- Drop breadcrumbs when `beforeBreadcrumb` throws instead of storing exception details on the breadcrumb.
- No longer fail Spring requests when a `TransactionNameProvider` throws, falling back to `<unlabeled transaction>` ([#6241](https://github.com/getsentry/sentry-java/pull/6241)).
- No longer fail Spring requests when a `SentryUserProvider` throws and overwrite the user with an empty user object ([#6240](https://github.com/getsentry/sentry-java/pull/6240)).
- Disable profiling when `profilesSampler` throws instead of falling back to `profilesSampleRate` or inheriting the parent profiling decision ([#6164](https://github.com/getsentry/sentry-java/pull/6164)).
- Report attached profiles dropped by transaction callback errors as `callback_error` in client reports and `OnDiscardCallback` ([#6166](https://github.com/getsentry/sentry-java/pull/6166)).
- Skip replay capture when `beforeErrorSampling` throws while retaining the error event ([#6165](https://github.com/getsentry/sentry-java/pull/6165)).
- Skip Android screenshots or view hierarchies when their capture callbacks throw while retaining the error event ([#6167](https://github.com/getsentry/sentry-java/pull/6167)).
- Keep the Android feedback form available when its options configurator throws ([#6239](https://github.com/getsentry/sentry-java/pull/6239)).
- Isolate nonfatal callback throwables while continuing to propagate fatal JVM errors ([#6251](https://github.com/getsentry/sentry-java/pull/6251)).

### Dependencies

- Bump Native SDK from v0.17.2 to v0.17.3 ([#6250](https://github.com/getsentry/sentry-java/pull/6250))
Expand Down
6 changes: 3 additions & 3 deletions sentry-android-core/api/sentry-android-core.api
Original file line number Diff line number Diff line change
Expand Up @@ -233,7 +233,7 @@ public final class io/sentry/android/core/AppState$LifecycleObserver : androidx/
public fun onStop (Landroidx/lifecycle/LifecycleOwner;)V
}

public final class io/sentry/android/core/ApplicationExitInfoEventProcessor : io/sentry/BackfillingEventProcessor {
public final class io/sentry/android/core/ApplicationExitInfoEventProcessor : io/sentry/BackfillingEventProcessor, io/sentry/internal/eventprocessor/SentryEventProcessor {
public fun <init> (Landroid/content/Context;Lio/sentry/android/core/SentryAndroidOptions;Lio/sentry/android/core/BuildInfoProvider;)V
public fun getOrder ()Ljava/lang/Long;
public fun process (Lio/sentry/SentryEvent;Lio/sentry/Hint;)Lio/sentry/SentryEvent;
Expand Down Expand Up @@ -401,7 +401,7 @@ public class io/sentry/android/core/PerfettoProfiler {
public fun endAndCollect (Ljava/util/function/Consumer;)V
}

public final class io/sentry/android/core/ScreenshotEventProcessor : io/sentry/EventProcessor {
public final class io/sentry/android/core/ScreenshotEventProcessor : io/sentry/internal/eventprocessor/SentryEventProcessor {
public fun <init> (Lio/sentry/android/core/SentryAndroidOptions;Lio/sentry/android/core/BuildInfoProvider;Z)V
public fun getOrder ()Ljava/lang/Long;
public fun process (Lio/sentry/SentryEvent;Lio/sentry/Hint;)Lio/sentry/SentryEvent;
Expand Down Expand Up @@ -680,7 +680,7 @@ public final class io/sentry/android/core/UserInteractionIntegration : android/a
public fun register (Lio/sentry/IScopes;Lio/sentry/SentryOptions;)V
}

public final class io/sentry/android/core/ViewHierarchyEventProcessor : io/sentry/EventProcessor {
public final class io/sentry/android/core/ViewHierarchyEventProcessor : io/sentry/internal/eventprocessor/SentryEventProcessor {
public fun <init> (Lio/sentry/android/core/SentryAndroidOptions;)V
public fun getOrder ()Ljava/lang/Long;
public fun process (Lio/sentry/SentryEvent;Lio/sentry/Hint;)Lio/sentry/SentryEvent;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@
import io.sentry.hints.AbnormalExit;
import io.sentry.hints.Backfillable;
import io.sentry.hints.NativeCrashExit;
import io.sentry.internal.eventprocessor.SentryEventProcessor;
import io.sentry.protocol.App;
import io.sentry.protocol.Contexts;
import io.sentry.protocol.DebugImage;
Expand Down Expand Up @@ -89,7 +90,8 @@
*/
@ApiStatus.Internal
@WorkerThread
public final class ApplicationExitInfoEventProcessor implements BackfillingEventProcessor {
public final class ApplicationExitInfoEventProcessor
implements BackfillingEventProcessor, SentryEventProcessor {

private final @NotNull Context context;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import io.sentry.android.core.internal.util.AndroidThreadChecker;
import io.sentry.android.core.performance.AppStartMetrics;
import io.sentry.android.core.performance.TimeSpan;
import io.sentry.internal.eventprocessor.SentryEventProcessor;
import io.sentry.protocol.App;
import io.sentry.protocol.OperatingSystem;
import io.sentry.protocol.SentryException;
Expand All @@ -32,7 +33,7 @@
import org.jetbrains.annotations.Nullable;
import org.jetbrains.annotations.TestOnly;

final class DefaultAndroidEventProcessor implements EventProcessor {
final class DefaultAndroidEventProcessor implements SentryEventProcessor {

@TestOnly final Context context;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
import static io.sentry.android.core.ActivityLifecycleIntegration.STANDALONE_APP_START_OP;
import static io.sentry.android.core.ActivityLifecycleIntegration.UI_LOAD_OP;

import io.sentry.EventProcessor;
import io.sentry.Hint;
import io.sentry.ISentryLifecycleToken;
import io.sentry.MeasurementUnit;
Expand All @@ -20,6 +19,7 @@
import io.sentry.android.core.internal.util.AndroidThreadChecker;
import io.sentry.android.core.performance.AppStartMetrics;
import io.sentry.android.core.performance.TimeSpan;
import io.sentry.internal.eventprocessor.SentryEventProcessor;
import io.sentry.protocol.App;
import io.sentry.protocol.MeasurementValue;
import io.sentry.protocol.SentryId;
Expand All @@ -36,7 +36,7 @@
import org.jetbrains.annotations.Nullable;

/** Event Processor responsible for adding Android metrics to transactions */
final class PerformanceAndroidEventProcessor implements EventProcessor {
final class PerformanceAndroidEventProcessor implements SentryEventProcessor {

private static final String APP_METRICS_ORIGIN = "auto.ui";

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
import android.graphics.Bitmap;
import android.view.View;
import io.sentry.Attachment;
import io.sentry.EventProcessor;
import io.sentry.Hint;
import io.sentry.SentryEvent;
import io.sentry.SentryLevel;
Expand All @@ -18,7 +17,9 @@
import io.sentry.android.replay.util.MaskRenderer;
import io.sentry.android.replay.util.ViewsKt;
import io.sentry.android.replay.viewhierarchy.ViewHierarchyNode;
import io.sentry.internal.eventprocessor.SentryEventProcessor;
import io.sentry.protocol.SentryTransaction;
import io.sentry.util.ExceptionUtils;
import io.sentry.util.HintUtils;
import io.sentry.util.Objects;
import java.util.concurrent.CountDownLatch;
Expand All @@ -34,7 +35,7 @@
* captured.
*/
@ApiStatus.Internal
public final class ScreenshotEventProcessor implements EventProcessor {
public final class ScreenshotEventProcessor implements SentryEventProcessor {

private final @NotNull SentryAndroidOptions options;
private final @NotNull BuildInfoProvider buildInfoProvider;
Expand Down Expand Up @@ -112,7 +113,18 @@ private boolean isMaskingEnabled() {
final @Nullable SentryAndroidOptions.BeforeCaptureCallback beforeCaptureCallback =
options.getBeforeScreenshotCaptureCallback();
if (beforeCaptureCallback != null) {
if (!beforeCaptureCallback.execute(event, hint, shouldDebounce)) {
try {
if (!beforeCaptureCallback.execute(event, hint, shouldDebounce)) {
return event;
}
} catch (Throwable e) {
ExceptionUtils.rethrowIfFatal(e);
options
.getLogger()
.log(
SentryLevel.ERROR,
"The beforeScreenshotCapture callback threw an exception. Skipping screenshot capture.",
e);
return event;
}
} else if (shouldDebounce) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,14 +62,37 @@ public class SentryUserFeedbackForm extends AlertDialog {
final @Nullable SentryFeedbackOptions.OptionsConfigurator configurator) {
super(context, themeResId);
this.associatedEventId = associatedEventId;
this.resolvedFeedbackOptions =
new SentryFeedbackOptions(Sentry.getCurrentScopes().getOptions().getFeedbackOptions());
final @NotNull SentryOptions options = Sentry.getCurrentScopes().getOptions();
@NotNull
SentryFeedbackOptions feedbackOptions = new SentryFeedbackOptions(options.getFeedbackOptions());
if (configuration != null) {
configuration.configure(context, resolvedFeedbackOptions);
final @NotNull SentryFeedbackOptions configuredOptions =
new SentryFeedbackOptions(feedbackOptions);
try {
configuration.configure(context, configuredOptions);
feedbackOptions = configuredOptions;
} catch (Throwable e) {
ExceptionUtils.rethrowIfFatal(e);
options
.getLogger()
.log(
SentryLevel.ERROR, "Feedback OptionsConfiguration callback threw an exception.", e);
}
}
if (configurator != null) {
configurator.configure(resolvedFeedbackOptions);
final @NotNull SentryFeedbackOptions configuredOptions =
new SentryFeedbackOptions(feedbackOptions);
try {
configurator.configure(configuredOptions);
feedbackOptions = configuredOptions;
} catch (Throwable e) {
ExceptionUtils.rethrowIfFatal(e);
options
.getLogger()
.log(SentryLevel.ERROR, "Feedback OptionsConfigurator callback threw an exception.", e);
}
}
this.resolvedFeedbackOptions = feedbackOptions;
SentryIntegrationPackageStorage.getInstance().addIntegration("UserFeedbackWidget");
maybeStartShakeDetection(context);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
import android.view.ViewGroup;
import android.view.Window;
import io.sentry.Attachment;
import io.sentry.EventProcessor;
import io.sentry.Hint;
import io.sentry.ILogger;
import io.sentry.ISerializer;
Expand All @@ -18,10 +17,12 @@
import io.sentry.android.core.internal.util.AndroidThreadChecker;
import io.sentry.android.core.internal.util.ClassUtil;
import io.sentry.android.core.internal.util.Debouncer;
import io.sentry.internal.eventprocessor.SentryEventProcessor;
import io.sentry.internal.viewhierarchy.ViewHierarchyExporter;
import io.sentry.protocol.SentryTransaction;
import io.sentry.protocol.ViewHierarchy;
import io.sentry.protocol.ViewHierarchyNode;
import io.sentry.util.ExceptionUtils;
import io.sentry.util.HintUtils;
import io.sentry.util.JsonSerializationUtils;
import io.sentry.util.Objects;
Expand All @@ -37,7 +38,7 @@

/** ViewHierarchyEventProcessor responsible for taking a snapshot of the current view hierarchy. */
@ApiStatus.Internal
public final class ViewHierarchyEventProcessor implements EventProcessor {
public final class ViewHierarchyEventProcessor implements SentryEventProcessor {

private final @NotNull SentryAndroidOptions options;
private final @NotNull Debouncer debouncer;
Expand Down Expand Up @@ -91,7 +92,18 @@ public ViewHierarchyEventProcessor(final @NotNull SentryAndroidOptions options)
final @Nullable SentryAndroidOptions.BeforeCaptureCallback beforeCaptureCallback =
options.getBeforeViewHierarchyCaptureCallback();
if (beforeCaptureCallback != null) {
if (!beforeCaptureCallback.execute(event, hint, shouldDebounce)) {
try {
if (!beforeCaptureCallback.execute(event, hint, shouldDebounce)) {
return event;
}
} catch (Throwable e) {
ExceptionUtils.rethrowIfFatal(e);
options
.getLogger()
.log(
SentryLevel.ERROR,
"The beforeViewHierarchyCapture callback threw an exception. Skipping view hierarchy capture.",
e);
return event;
}
} else if (shouldDebounce) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,25 +29,30 @@ import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.test.ext.junit.runners.AndroidJUnit4
import com.google.common.truth.Truth.assertThat
import io.sentry.Attachment
import io.sentry.Hint
import io.sentry.ILogger
import io.sentry.MainEventProcessor
import io.sentry.SentryEvent
import io.sentry.SentryIntegrationPackageStorage
import io.sentry.SentryLevel
import io.sentry.TypeCheckHint.ANDROID_ACTIVITY
import io.sentry.protocol.SentryException
import io.sentry.util.thread.IThreadChecker
import java.io.File
import kotlin.test.BeforeTest
import kotlin.test.Test
import kotlin.test.assertEquals
import kotlin.test.assertFailsWith
import kotlin.test.assertFalse
import kotlin.test.assertNotNull
import kotlin.test.assertNull
import kotlin.test.assertSame
import kotlin.test.assertTrue
import org.junit.runner.RunWith
import org.mockito.kotlin.mock
import org.mockito.kotlin.verify
import org.mockito.kotlin.whenever
import org.robolectric.Robolectric.buildActivity
import org.robolectric.Shadows.shadowOf
Expand Down Expand Up @@ -310,11 +315,51 @@ class ScreenshotEventProcessorTest {
assertNull(hint.screenshot)
}

@Test
fun `when capture callback throws a nonfatal throwable, skips screenshot and retains event`() {
CurrentActivityHolder.getInstance().setActivity(fixture.activity)
val logger = mock<ILogger>()
fixture.options.isDebug = true
fixture.options.setLogger(logger)
val failure = AssertionError("callback failed")
fixture.options.setBeforeScreenshotCaptureCallback { _, _, _ -> throw failure }
val processor = fixture.getSut(true)
val event = SentryEvent().apply { exceptions = listOf(SentryException()) }
val hint = Hint()

assertThat(processor.process(event, hint)).isSameInstanceAs(event)
assertThat(hint.screenshot).isNull()
verify(logger)
.log(
SentryLevel.ERROR,
"The beforeScreenshotCapture callback threw an exception. Skipping screenshot capture.",
failure,
)

fixture.options.setBeforeScreenshotCaptureCallback { _, _, _ -> true }
val nextHint = Hint()
assertThat(processor.process(event, nextHint)).isSameInstanceAs(event)
assertThat(nextHint.screenshot).isNotNull()
}

@Test
fun `when capture callback throws a fatal error, it is not swallowed`() {
CurrentActivityHolder.getInstance().setActivity(fixture.activity)
val failure = OutOfMemoryError("callback failed")
fixture.options.setBeforeScreenshotCaptureCallback { _, _, _ -> throw failure }
val processor = fixture.getSut(true)
val event = SentryEvent().apply { exceptions = listOf(SentryException()) }

val thrown = assertFailsWith<OutOfMemoryError> { processor.process(event, Hint()) }

assertThat(thrown).isSameInstanceAs(failure)
}

@Test
fun `when capture callback returns true, a screenshot should be captured`() {
CurrentActivityHolder.getInstance().setActivity(fixture.activity)

fixture.options.setBeforeViewHierarchyCaptureCallback { _, _, _ -> true }
fixture.options.setBeforeScreenshotCaptureCallback { _, _, _ -> true }
val processor = fixture.getSut(true)

val event = SentryEvent().apply { exceptions = listOf(SentryException()) }
Expand Down
Loading
Loading