tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

fake_desktop_capturer.cc (2764B)


      1 /*
      2 *  Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
      3 *
      4 *  Use of this source code is governed by a BSD-style license
      5 *  that can be found in the LICENSE file in the root of the source
      6 *  tree. An additional intellectual property rights grant can be found
      7 *  in the file PATENTS.  All contributing project authors may
      8 *  be found in the AUTHORS file in the root of the source tree.
      9 */
     10 
     11 #include "modules/desktop_capture/fake_desktop_capturer.h"
     12 
     13 #include <memory>
     14 #include <utility>
     15 
     16 #include "modules/desktop_capture/desktop_capture_types.h"
     17 #include "modules/desktop_capture/desktop_capturer.h"
     18 #include "modules/desktop_capture/desktop_frame.h"
     19 #include "modules/desktop_capture/desktop_frame_generator.h"
     20 #include "modules/desktop_capture/shared_memory.h"
     21 
     22 namespace webrtc {
     23 
     24 FakeDesktopCapturer::FakeDesktopCapturer() = default;
     25 FakeDesktopCapturer::~FakeDesktopCapturer() = default;
     26 
     27 void FakeDesktopCapturer::set_result(DesktopCapturer::Result result) {
     28  result_ = result;
     29 }
     30 
     31 int FakeDesktopCapturer::num_frames_captured() const {
     32  return num_frames_captured_;
     33 }
     34 
     35 int FakeDesktopCapturer::num_capture_attempts() const {
     36  return num_capture_attempts_;
     37 }
     38 
     39 // Uses the `generator` provided as DesktopFrameGenerator, FakeDesktopCapturer
     40 // does
     41 // not take the ownership of `generator`.
     42 void FakeDesktopCapturer::set_frame_generator(
     43    DesktopFrameGenerator* generator) {
     44  generator_ = generator;
     45 }
     46 
     47 void FakeDesktopCapturer::Start(DesktopCapturer::Callback* callback) {
     48  callback_ = callback;
     49 }
     50 
     51 void FakeDesktopCapturer::CaptureFrame() {
     52  num_capture_attempts_++;
     53  if (generator_) {
     54    if (result_ != DesktopCapturer::Result::SUCCESS) {
     55      callback_->OnCaptureResult(result_, nullptr);
     56      return;
     57    }
     58 
     59    std::unique_ptr<DesktopFrame> frame(
     60        generator_->GetNextFrame(shared_memory_factory_.get()));
     61    if (frame) {
     62      num_frames_captured_++;
     63      callback_->OnCaptureResult(result_, std::move(frame));
     64    } else {
     65      callback_->OnCaptureResult(DesktopCapturer::Result::ERROR_TEMPORARY,
     66                                 nullptr);
     67    }
     68    return;
     69  }
     70  callback_->OnCaptureResult(DesktopCapturer::Result::ERROR_PERMANENT, nullptr);
     71 }
     72 
     73 void FakeDesktopCapturer::SetSharedMemoryFactory(
     74    std::unique_ptr<SharedMemoryFactory> shared_memory_factory) {
     75  shared_memory_factory_ = std::move(shared_memory_factory);
     76 }
     77 
     78 bool FakeDesktopCapturer::GetSourceList(DesktopCapturer::SourceList* sources) {
     79  sources->push_back({kWindowId, 1, "A-Fake-DesktopCapturer-Window"});
     80  sources->push_back({kScreenId, 1});
     81  return true;
     82 }
     83 
     84 bool FakeDesktopCapturer::SelectSource(DesktopCapturer::SourceId id) {
     85  return id == kWindowId || id == kScreenId || id == kFullDesktopScreenId;
     86 }
     87 
     88 }  // namespace webrtc