desktop_media_list.patch 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
  2. From: deepak1556 <[email protected]>
  3. Date: Thu, 18 Oct 2018 17:07:01 -0700
  4. Subject: desktop_media_list.patch
  5. * Use our grit resources instead of the chrome ones.
  6. * Disabled WindowCaptureMacV2 feature for https://github.com/electron/electron/pull/30507
  7. * Ensure "OnRefreshComplete()" even if there are no items in the list
  8. diff --git a/chrome/browser/media/webrtc/desktop_media_list.h b/chrome/browser/media/webrtc/desktop_media_list.h
  9. index 6fb778093f57942faebbc6a68a92967826476674..57cad85973c5cfe3a19f80fd318ec46f085ad4d0 100644
  10. --- a/chrome/browser/media/webrtc/desktop_media_list.h
  11. +++ b/chrome/browser/media/webrtc/desktop_media_list.h
  12. @@ -107,7 +107,8 @@ class DesktopMediaList {
  13. // once per DesktopMediaList instance. It should not be called after
  14. // StartUpdating(), and StartUpdating() should not be called until |callback|
  15. // has been called.
  16. - virtual void Update(UpdateCallback callback) = 0;
  17. + virtual void Update(UpdateCallback callback,
  18. + bool refresh_thumbnails = false) = 0;
  19. virtual int GetSourceCount() const = 0;
  20. virtual const Source& GetSource(int index) const = 0;
  21. diff --git a/chrome/browser/media/webrtc/desktop_media_list_base.cc b/chrome/browser/media/webrtc/desktop_media_list_base.cc
  22. index a82e0b1a7e999817c8ee420ceddeb7ca9ee78caf..e07f4ded61a7a64983da1b6d07315aee9684a148 100644
  23. --- a/chrome/browser/media/webrtc/desktop_media_list_base.cc
  24. +++ b/chrome/browser/media/webrtc/desktop_media_list_base.cc
  25. @@ -74,12 +74,12 @@ void DesktopMediaListBase::StartUpdating(DesktopMediaListObserver* observer) {
  26. Refresh(true);
  27. }
  28. -void DesktopMediaListBase::Update(UpdateCallback callback) {
  29. +void DesktopMediaListBase::Update(UpdateCallback callback, bool refresh_thumbnails) {
  30. DCHECK_CURRENTLY_ON(BrowserThread::UI);
  31. DCHECK(sources_.empty());
  32. DCHECK(!refresh_callback_);
  33. refresh_callback_ = std::move(callback);
  34. - Refresh(false);
  35. + Refresh(refresh_thumbnails);
  36. }
  37. int DesktopMediaListBase::GetSourceCount() const {
  38. diff --git a/chrome/browser/media/webrtc/desktop_media_list_base.h b/chrome/browser/media/webrtc/desktop_media_list_base.h
  39. index 9368d56f2b434b1a7101f28908f070ad9908be7e..804eb2c7ede137b8c9d0cf43042ff7f20dad5b91 100644
  40. --- a/chrome/browser/media/webrtc/desktop_media_list_base.h
  41. +++ b/chrome/browser/media/webrtc/desktop_media_list_base.h
  42. @@ -39,7 +39,7 @@ class DesktopMediaListBase : public DesktopMediaList {
  43. void SetThumbnailSize(const gfx::Size& thumbnail_size) override;
  44. void SetViewDialogWindowId(content::DesktopMediaID dialog_id) override;
  45. void StartUpdating(DesktopMediaListObserver* observer) override;
  46. - void Update(UpdateCallback callback) override;
  47. + void Update(UpdateCallback callback, bool refresh_thumbnails) override;
  48. int GetSourceCount() const override;
  49. const Source& GetSource(int index) const override;
  50. DesktopMediaList::Type GetMediaListType() const override;
  51. diff --git a/chrome/browser/media/webrtc/fake_desktop_media_list.cc b/chrome/browser/media/webrtc/fake_desktop_media_list.cc
  52. index cea6af048e682e33b5d93e4a3bfb4072840ca4fe..1c98d2275fa73a9e105bbd8928e05b48a4a05c14 100644
  53. --- a/chrome/browser/media/webrtc/fake_desktop_media_list.cc
  54. +++ b/chrome/browser/media/webrtc/fake_desktop_media_list.cc
  55. @@ -79,7 +79,8 @@ void FakeDesktopMediaList::StartUpdating(DesktopMediaListObserver* observer) {
  56. thumbnail_ = gfx::ImageSkia::CreateFrom1xBitmap(bitmap);
  57. }
  58. -void FakeDesktopMediaList::Update(UpdateCallback callback) {
  59. +void FakeDesktopMediaList::Update(UpdateCallback callback,
  60. + bool refresh_thumbnails) {
  61. std::move(callback).Run();
  62. }
  63. diff --git a/chrome/browser/media/webrtc/fake_desktop_media_list.h b/chrome/browser/media/webrtc/fake_desktop_media_list.h
  64. index 786c526588d81b8b5b1b5dd3760719a53e005995..f66b7d0b4dfcbb8ed3dde5a9ff463ae2c8818d27 100644
  65. --- a/chrome/browser/media/webrtc/fake_desktop_media_list.h
  66. +++ b/chrome/browser/media/webrtc/fake_desktop_media_list.h
  67. @@ -40,7 +40,8 @@ class FakeDesktopMediaList : public DesktopMediaList {
  68. void SetThumbnailSize(const gfx::Size& thumbnail_size) override;
  69. void SetViewDialogWindowId(content::DesktopMediaID dialog_id) override;
  70. void StartUpdating(DesktopMediaListObserver* observer) override;
  71. - void Update(UpdateCallback callback) override;
  72. + void Update(UpdateCallback callback,
  73. + bool refresh_thumbnails = false) override;
  74. int GetSourceCount() const override;
  75. const Source& GetSource(int index) const override;
  76. DesktopMediaList::Type GetMediaListType() const override;
  77. diff --git a/chrome/browser/media/webrtc/native_desktop_media_list.cc b/chrome/browser/media/webrtc/native_desktop_media_list.cc
  78. index b1d9cc5b8897b0b6d153b0b4813c8a6eca42664e..c85ea4f9a9b5ec9a669196f4e8d1010457bf38f0 100644
  79. --- a/chrome/browser/media/webrtc/native_desktop_media_list.cc
  80. +++ b/chrome/browser/media/webrtc/native_desktop_media_list.cc
  81. @@ -233,9 +233,13 @@ content::DesktopMediaID::Id GetUpdatedWindowId(
  82. }
  83. }
  84. #elif BUILDFLAG(IS_MAC)
  85. +#if 0
  86. + // Should be re-enabled when addressing
  87. + // https://github.com/electron/electron/issues/30682
  88. if (remote_cocoa::ScopedCGWindowID::Get(desktop_media_id.id)) {
  89. window_id = desktop_media_id.id;
  90. }
  91. +#endif
  92. #endif
  93. return window_id;
  94. @@ -338,7 +342,7 @@ class NativeDesktopMediaList::Worker
  95. base::WeakPtr<NativeDesktopMediaList> media_list_;
  96. DesktopMediaID::Type source_type_;
  97. - const std::unique_ptr<ThumbnailCapturer> capturer_;
  98. + std::unique_ptr<ThumbnailCapturer> capturer_;
  99. const ThumbnailCapturer::FrameDeliveryMethod frame_delivery_method_;
  100. const bool add_current_process_windows_;
  101. const bool auto_show_delegated_source_list_;
  102. @@ -628,6 +632,12 @@ void NativeDesktopMediaList::Worker::RefreshNextThumbnail() {
  103. FROM_HERE,
  104. base::BindOnce(&NativeDesktopMediaList::UpdateNativeThumbnailsFinished,
  105. media_list_));
  106. +
  107. + // This call is necessary to release underlying OS screen capture mechanisms.
  108. + // Skip if the source list is delegated, as the source list window will be active.
  109. + if (!capturer_->GetDelegatedSourceListController()) {
  110. + capturer_.reset();
  111. + }
  112. }
  113. void NativeDesktopMediaList::Worker::OnCaptureResult(
  114. @@ -1035,6 +1045,11 @@ void NativeDesktopMediaList::RefreshForVizFrameSinkWindows(
  115. FROM_HERE, base::BindOnce(&Worker::RefreshThumbnails,
  116. base::Unretained(worker_.get()),
  117. std::move(native_ids), thumbnail_size_));
  118. + } else {
  119. +#if defined(USE_AURA)
  120. + pending_native_thumbnail_capture_ = true;
  121. +#endif
  122. + UpdateNativeThumbnailsFinished();
  123. }
  124. }