Fix crash in WindowCapturerWinGdi::CaptureFrame.

A couple crashes have been reported in Chromium due to us dereferencing
|result.frame| which can be a nullptr.

This bug tracks the addition of new test cases which will help us
avoid issues like this in the future:
https://bugs.chromium.org/p/webrtc/issues/detail?id=12682

Bug: chromium:1199257
Change-Id: I720dd6ceb38938dc392f0924acf2cac287bfcffc
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/215340
Reviewed-by: Jamie Walch <jamiewalch@chromium.org>
Commit-Queue: Austin Orion <auorion@microsoft.com>
Cr-Commit-Position: refs/heads/master@{#33746}
diff --git a/modules/desktop_capture/win/window_capturer_win_gdi.cc b/modules/desktop_capture/win/window_capturer_win_gdi.cc
index 5f7c788..277c02e 100644
--- a/modules/desktop_capture/win/window_capturer_win_gdi.cc
+++ b/modules/desktop_capture/win/window_capturer_win_gdi.cc
@@ -158,12 +158,16 @@
 
   CaptureResults results = CaptureFrame(/*capture_owned_windows*/ true);
 
-  int capture_time_ms = (rtc::TimeNanos() - capture_start_time_nanos) /
-                        rtc::kNumNanosecsPerMillisec;
-  RTC_HISTOGRAM_COUNTS_1000(
-      "WebRTC.DesktopCapture.Win.WindowGdiCapturerFrameTime", capture_time_ms);
-  results.frame->set_capture_time_ms(capture_time_ms);
-  results.frame->set_capturer_id(DesktopCapturerId::kWindowCapturerWinGdi);
+  if (results.frame) {
+    int capture_time_ms = (rtc::TimeNanos() - capture_start_time_nanos) /
+                          rtc::kNumNanosecsPerMillisec;
+    RTC_HISTOGRAM_COUNTS_1000(
+        "WebRTC.DesktopCapture.Win.WindowGdiCapturerFrameTime",
+        capture_time_ms);
+    results.frame->set_capture_time_ms(capture_time_ms);
+    results.frame->set_capturer_id(DesktopCapturerId::kWindowCapturerWinGdi);
+  }
+
   callback_->OnCaptureResult(results.result, std::move(results.frame));
 }