Enable full screen windows to be shown in window picker for mac. Before this patch a full screen window can be shared if sharing is started before the window is entered into full screen mode, but not if it's already in full screen.

BUG=chromium:575990
TEST: Manual test using TextEdit full screen mode.

Review URL: https://codereview.webrtc.org/1579213007

Cr-Commit-Position: refs/heads/master@{#11311}
diff --git a/webrtc/modules/desktop_capture/mac/full_screen_chrome_window_detector.cc b/webrtc/modules/desktop_capture/mac/full_screen_chrome_window_detector.cc
index 84579c4..2d3c2d9 100644
--- a/webrtc/modules/desktop_capture/mac/full_screen_chrome_window_detector.cc
+++ b/webrtc/modules/desktop_capture/mac/full_screen_chrome_window_detector.cc
@@ -15,7 +15,6 @@
 #include <string>
 
 #include "webrtc/base/macutils.h"
-#include "webrtc/modules/desktop_capture/mac/desktop_configuration.h"
 #include "webrtc/modules/desktop_capture/mac/window_list_utils.h"
 #include "webrtc/system_wrappers/include/logging.h"
 
@@ -26,56 +25,6 @@
 
 const int64_t kUpdateIntervalMs = 500;
 
-// Returns true if the window is minimized.
-bool IsWindowMinimized(CGWindowID id) {
-  CFArrayRef window_id_array =
-      CFArrayCreate(NULL, reinterpret_cast<const void **>(&id), 1, NULL);
-  CFArrayRef window_array =
-      CGWindowListCreateDescriptionFromArray(window_id_array);
-  bool minimized = false;
-
-  if (window_array && CFArrayGetCount(window_array)) {
-    CFDictionaryRef window = reinterpret_cast<CFDictionaryRef>(
-        CFArrayGetValueAtIndex(window_array, 0));
-    CFBooleanRef on_screen =  reinterpret_cast<CFBooleanRef>(
-        CFDictionaryGetValue(window, kCGWindowIsOnscreen));
-
-    minimized = !on_screen;
-  }
-
-  CFRelease(window_id_array);
-  CFRelease(window_array);
-
-  return minimized;
-}
-
-// Returns true if the window is occupying a full screen.
-bool IsWindowFullScreen(const MacDesktopConfiguration& desktop_config,
-                        CFDictionaryRef window) {
-  bool fullscreen = false;
-
-  CFDictionaryRef bounds_ref = reinterpret_cast<CFDictionaryRef>(
-      CFDictionaryGetValue(window, kCGWindowBounds));
-
-  CGRect bounds;
-  if (bounds_ref &&
-      CGRectMakeWithDictionaryRepresentation(bounds_ref, &bounds)) {
-    for (MacDisplayConfigurations::const_iterator it =
-             desktop_config.displays.begin();
-         it != desktop_config.displays.end(); ++it) {
-      if (it->bounds.equals(DesktopRect::MakeXYWH(bounds.origin.x,
-                                                  bounds.origin.y,
-                                                  bounds.size.width,
-                                                  bounds.size.height))) {
-        fullscreen = true;
-        break;
-      }
-    }
-  }
-
-  return fullscreen;
-}
-
 std::string GetWindowTitle(CGWindowID id) {
   CFArrayRef window_id_array =
       CFArrayCreate(NULL, reinterpret_cast<const void **>(&id), 1, NULL);
diff --git a/webrtc/modules/desktop_capture/mac/window_list_utils.cc b/webrtc/modules/desktop_capture/mac/window_list_utils.cc
index 0c3eaa3..0261c45 100644
--- a/webrtc/modules/desktop_capture/mac/window_list_utils.cc
+++ b/webrtc/modules/desktop_capture/mac/window_list_utils.cc
@@ -59,4 +59,56 @@
   return true;
 }
 
+// Returns true if the window is occupying a full screen.
+bool IsWindowFullScreen(
+    const MacDesktopConfiguration& desktop_config,
+    CFDictionaryRef window) {
+  bool fullscreen = false;
+  CFDictionaryRef bounds_ref = reinterpret_cast<CFDictionaryRef>(
+      CFDictionaryGetValue(window, kCGWindowBounds));
+
+  CGRect bounds;
+  if (bounds_ref &&
+      CGRectMakeWithDictionaryRepresentation(bounds_ref, &bounds)) {
+    for (MacDisplayConfigurations::const_iterator it =
+             desktop_config.displays.begin();
+         it != desktop_config.displays.end(); ++it) {
+      if (it->bounds.equals(DesktopRect::MakeXYWH(bounds.origin.x,
+                                                  bounds.origin.y,
+                                                  bounds.size.width,
+                                                  bounds.size.height))) {
+        fullscreen = true;
+        break;
+      }
+    }
+  }
+
+  return fullscreen;
+}
+
+// Returns true if the window is minimized.
+bool IsWindowMinimized(CGWindowID id) {
+  CFArrayRef window_id_array =
+      CFArrayCreate(NULL, reinterpret_cast<const void **>(&id), 1, NULL);
+  CFArrayRef window_array =
+      CGWindowListCreateDescriptionFromArray(window_id_array);
+  bool minimized = false;
+
+  if (window_array && CFArrayGetCount(window_array)) {
+    CFDictionaryRef window = reinterpret_cast<CFDictionaryRef>(
+        CFArrayGetValueAtIndex(window_array, 0));
+    CFBooleanRef on_screen =  reinterpret_cast<CFBooleanRef>(
+        CFDictionaryGetValue(window, kCGWindowIsOnscreen));
+
+    minimized = !on_screen;
+  }
+
+  CFRelease(window_id_array);
+  CFRelease(window_array);
+
+  return minimized;
+}
+
+
+
 }  // namespace webrtc
diff --git a/webrtc/modules/desktop_capture/mac/window_list_utils.h b/webrtc/modules/desktop_capture/mac/window_list_utils.h
index 7be3850..d56166f 100644
--- a/webrtc/modules/desktop_capture/mac/window_list_utils.h
+++ b/webrtc/modules/desktop_capture/mac/window_list_utils.h
@@ -11,6 +11,9 @@
 #ifndef WEBRTC_MODULES_DESKTOP_CAPTURE_WINDOW_LIST_UTILS_H_
 #define WEBRTC_MODULES_DESKTOP_CAPTURE_WINDOW_LIST_UTILS_H_
 
+#include <ApplicationServices/ApplicationServices.h>
+
+#include "webrtc/modules/desktop_capture/mac/desktop_configuration.h"
 #include "webrtc/modules/desktop_capture/window_capturer.h"
 
 namespace webrtc {
@@ -18,6 +21,14 @@
 // A helper function to get the on-screen windows.
 bool GetWindowList(WindowCapturer::WindowList* windows);
 
+// Returns true if the window is occupying a full screen.
+bool IsWindowFullScreen(const MacDesktopConfiguration& desktop_config,
+                                 CFDictionaryRef window);
+
+// Returns true if the window is minimized.
+bool IsWindowMinimized(CGWindowID id);
+
+
 }  // namespace webrtc
 
 #endif  // WEBRTC_MODULES_DESKTOP_CAPTURE_WINDOW_LIST_UTILS_H_
diff --git a/webrtc/modules/desktop_capture/window_capturer_mac.mm b/webrtc/modules/desktop_capture/window_capturer_mac.mm
index 806fc5c..22061ed 100644
--- a/webrtc/modules/desktop_capture/window_capturer_mac.mm
+++ b/webrtc/modules/desktop_capture/window_capturer_mac.mm
@@ -82,11 +82,12 @@
 bool WindowCapturerMac::GetWindowList(WindowList* windows) {
   // Only get on screen, non-desktop windows.
   CFArrayRef window_array = CGWindowListCopyWindowInfo(
-      kCGWindowListOptionOnScreenOnly | kCGWindowListExcludeDesktopElements,
+      kCGWindowListExcludeDesktopElements,
       kCGNullWindowID);
   if (!window_array)
     return false;
-
+  MacDesktopConfiguration desktop_config = MacDesktopConfiguration::GetCurrent(
+      MacDesktopConfiguration::TopLeftOrigin);
   // Check windows to make sure they have an id, title, and use window layer
   // other than 0.
   CFIndex count = CFArrayGetCount(window_array);
@@ -108,6 +109,11 @@
 
       int id;
       CFNumberGetValue(window_id, kCFNumberIntType, &id);
+
+      // Skip windows that are minimized and not full screen.
+      if (IsWindowMinimized(id) &&
+          !IsWindowFullScreen(desktop_config, window)) { continue;}
+
       WindowCapturer::Window window;
       window.id = id;
       if (!rtc::ToUtf8(window_title, &(window.title)) ||