Index: media/capture/content/screen_capture_device_core.cc |
diff --git a/media/capture/content/screen_capture_device_core.cc b/media/capture/content/screen_capture_device_core.cc |
index 0f06dfa51c5d59f4d73c3539873558ceaeb81452..f65ea591741117b68c4a1cc5b9487d896e5b083e 100644 |
--- a/media/capture/content/screen_capture_device_core.cc |
+++ b/media/capture/content/screen_capture_device_core.cc |
@@ -69,7 +69,7 @@ void ScreenCaptureDeviceCore::AllocateAndStart( |
void ScreenCaptureDeviceCore::RequestRefreshFrame() { |
DCHECK(thread_checker_.CalledOnValidThread()); |
- if (state_ != kCapturing) |
+ if (state_ != kCapturing && state_ != kSuspended) |
return; |
if (oracle_proxy_->AttemptPassiveRefresh()) |
@@ -77,12 +77,34 @@ void ScreenCaptureDeviceCore::RequestRefreshFrame() { |
capture_machine_->MaybeCaptureForRefresh(); |
} |
-void ScreenCaptureDeviceCore::StopAndDeAllocate() { |
+void ScreenCaptureDeviceCore::Suspend() { |
DCHECK(thread_checker_.CalledOnValidThread()); |
if (state_ != kCapturing) |
return; |
+ TransitionStateTo(kSuspended); |
+ |
+ capture_machine_->Suspend(); |
+} |
+ |
+void ScreenCaptureDeviceCore::Resume() { |
+ DCHECK(thread_checker_.CalledOnValidThread()); |
+ |
+ if (state_ != kSuspended) |
+ return; |
+ |
+ TransitionStateTo(kCapturing); |
+ |
+ capture_machine_->Resume(); |
+} |
+ |
+void ScreenCaptureDeviceCore::StopAndDeAllocate() { |
+ DCHECK(thread_checker_.CalledOnValidThread()); |
+ |
+ if (state_ != kCapturing && state_ != kSuspended) |
+ return; |
+ |
oracle_proxy_->Stop(); |
oracle_proxy_ = NULL; |
@@ -105,7 +127,7 @@ ScreenCaptureDeviceCore::ScreenCaptureDeviceCore( |
ScreenCaptureDeviceCore::~ScreenCaptureDeviceCore() { |
DCHECK(thread_checker_.CalledOnValidThread()); |
- DCHECK_NE(state_, kCapturing); |
+ DCHECK(state_ != kCapturing && state_ != kSuspended); |
if (capture_machine_) { |
capture_machine_->Stop( |
base::Bind(&DeleteCaptureMachine, base::Passed(&capture_machine_))); |
@@ -117,7 +139,8 @@ void ScreenCaptureDeviceCore::TransitionStateTo(State next_state) { |
DCHECK(thread_checker_.CalledOnValidThread()); |
#ifndef NDEBUG |
- static const char* kStateNames[] = {"Idle", "Capturing", "Error"}; |
+ static const char* kStateNames[] = {"Idle", "Capturing", "Suspended", |
+ "Error"}; |
static_assert(arraysize(kStateNames) == kLastCaptureState, |
"Different number of states and textual descriptions"); |
DVLOG(1) << "State change: " << kStateNames[state_] << " --> " |