1e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org/*
2e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org *  Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
3e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org *
4e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org *  Use of this source code is governed by a BSD-style license
5e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org *  that can be found in the LICENSE file in the root of the source
6e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org *  tree. An additional intellectual property rights grant can be found
7e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org *  in the file PATENTS.  All contributing project authors may
8e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org *  be found in the AUTHORS file in the root of the source tree.
9e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org */
10e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org
11e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org#ifndef WEBRTC_MODULES_DESKTOP_CAPTURE_WINDOW_CAPTURER_H_
12e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org#define WEBRTC_MODULES_DESKTOP_CAPTURE_WINDOW_CAPTURER_H_
13e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org
140a9ed7c31eab2a2c73eb0020c8b278762ad58ea5mcasas@webrtc.org#include <string>
15774b3d38a4a0f1a8ec08972a3c543cb5d607ce13henrike@webrtc.org#include <vector>
16e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org
17774b3d38a4a0f1a8ec08972a3c543cb5d607ce13henrike@webrtc.org#include "webrtc/base/constructormagic.h"
18af54d4b3a12f79ebcfe10695a8ec2b1da80ab1f4sergeyu@chromium.org#include "webrtc/modules/desktop_capture/desktop_capture_types.h"
19e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org#include "webrtc/modules/desktop_capture/desktop_capturer.h"
20e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org#include "webrtc/typedefs.h"
21e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org
22e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.orgnamespace webrtc {
23e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org
2491685dc421db7dcdc24f6a154de9b92eababf6fdsergeyu@chromium.orgclass DesktopCaptureOptions;
2591685dc421db7dcdc24f6a154de9b92eababf6fdsergeyu@chromium.org
26e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.orgclass WindowCapturer : public DesktopCapturer {
27e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org public:
28af54d4b3a12f79ebcfe10695a8ec2b1da80ab1f4sergeyu@chromium.org  typedef webrtc::WindowId WindowId;
29e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org
30e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org  struct Window {
31e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org    WindowId id;
32e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org
33e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org    // Title of the window in UTF-8 encoding.
34e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org    std::string title;
35e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org  };
36e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org
37e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org  typedef std::vector<Window> WindowList;
38e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org
3991685dc421db7dcdc24f6a154de9b92eababf6fdsergeyu@chromium.org  static WindowCapturer* Create(const DesktopCaptureOptions& options);
4091685dc421db7dcdc24f6a154de9b92eababf6fdsergeyu@chromium.org
4191685dc421db7dcdc24f6a154de9b92eababf6fdsergeyu@chromium.org  // TODO(sergeyu): Remove this method. crbug.com/172183
42e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org  static WindowCapturer* Create();
43e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org
44e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org  virtual ~WindowCapturer() {}
45e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org
46e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org  // Get list of windows. Returns false in case of a failure.
47e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org  virtual bool GetWindowList(WindowList* windows) = 0;
48e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org
49e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org  // Select window to be captured. Returns false in case of a failure (e.g. if
50e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org  // there is no window with the specified id).
51e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org  virtual bool SelectWindow(WindowId id) = 0;
52dd6cf04628fd4772e543b5008b5328f6c7988f5ajiayl@webrtc.org
53dd6cf04628fd4772e543b5008b5328f6c7988f5ajiayl@webrtc.org  // Bring the selected window to the front. Returns false in case of a
54dd6cf04628fd4772e543b5008b5328f6c7988f5ajiayl@webrtc.org  // failure or no window selected.
55dd6cf04628fd4772e543b5008b5328f6c7988f5ajiayl@webrtc.org  // TODO(jiayl): remove the default impl when FakeWindowCapturer is updated in
56dd6cf04628fd4772e543b5008b5328f6c7988f5ajiayl@webrtc.org  // Chromium.
57dd6cf04628fd4772e543b5008b5328f6c7988f5ajiayl@webrtc.org  virtual bool BringSelectedWindowToFront() {
58dd6cf04628fd4772e543b5008b5328f6c7988f5ajiayl@webrtc.org    return true;
59dd6cf04628fd4772e543b5008b5328f6c7988f5ajiayl@webrtc.org  }
60e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org};
61e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org
62e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org}  // namespace webrtc
63e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org
64e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org#endif  // WEBRTC_MODULES_DESKTOP_CAPTURE_WINDOW_CAPTURER_H_
65e032f9f280d973fac2d379de4e2884d79f312faasergeyu@chromium.org
66