Title: [240644] trunk
Revision
240644
Author
[email protected]
Date
2019-01-28 22:20:56 -0800 (Mon, 28 Jan 2019)

Log Message

Web Inspector: provide a way to edit page WebRTC settings on a remote target
https://bugs.webkit.org/show_bug.cgi?id=193863
<rdar://problem/47572764>

Reviewed by Joseph Pecoraro.

Source/_javascript_Core:

* inspector/protocol/Page.json:
Add more values to the `Setting` enum type:
 - `ICECandidateFilteringEnabled`
 - `MediaCaptureRequiresSecureConnection`
 - `MockCaptureDevicesEnabled`

Source/WebCore:

Test: inspector/page/overrideSetting-ICECandidateFilteringEnabled.html
      inspector/page/overrideSetting-MockCaptureDevicesEnabled.html

* inspector/agents/InspectorPageAgent.cpp:

* page/Settings.yaml:
* page/SettingsBase.h:
* page/SettingsBase.cpp:
(SettingsBase::iceCandidateFilteringEnabledChanged): Added.
(SettingsBase::mockCaptureDevicesEnabledChanged): Added.
* Scripts/GenerateSettings.rb:
* Scripts/SettingsTemplates/Settings.cpp.erb:
Add page-level settings for WebRTC preferences.

* Modules/mediastream/UserMediaController.cpp:
(WebCore::UserMediaController::canCallGetUserMedia):

* testing/InternalSettings.cpp:
(WebCore::InternalSettings::setMediaCaptureRequiresSecureConnection):

* testing/Internals.h:
* testing/Internals.cpp:
(WebCore::Internals::Internals):
(WebCore::Internals::setMockMediaCaptureDevicesEnabled):
(WebCore::Internals::setMediaCaptureRequiresSecureConnection): Added.

* page/DeprecatedGlobalSettings.h:
* page/DeprecatedGlobalSettings.cpp:
(WebCore::DeprecatedGlobalSettings::mockCaptureDevicesEnabled): Deleted.
(WebCore::DeprecatedGlobalSettings::setMockCaptureDevicesEnabled): Deleted.
(WebCore::DeprecatedGlobalSettings::mediaCaptureRequiresSecureConnection): Deleted.
(WebCore::DeprecatedGlobalSettings::setMediaCaptureRequiresSecureConnection): Deleted.

Source/WebInspectorUI:

* UserInterface/Base/Main.js:
(WI.loaded):
(WI.initializeTarget):
(WI._handleDeviceSettingsToolbarButtonClicked):
(WI._handleDeviceSettingsToolbarButtonClicked.createCheckbox):
(WI._handleDeviceSettingsToolbarButtonClicked.createColumns): Deleted.
* UserInterface/Views/Main.css:
(.device-settings-content .container): Added.

* Localizations/en.lproj/localizedStrings.js:

Source/WebKit:

* Shared/WebPreferences.yaml:
Add page-level settings for WebRTC preferences.

Source/WebKitLegacy/mac:

* WebView/WebView.mm:
(-[WebView _preferencesChanged:]):
Add page-level settings for WebRTC preferences.

LayoutTests:

* inspector/page/overrideSetting-ICECandidateFilteringEnabled.html: Added.
* inspector/page/overrideSetting-ICECandidateFilteringEnabled-expected.txt: Added.
* inspector/page/overrideSetting-MockCaptureDevicesEnabled.html: Added.
* inspector/page/overrideSetting-MockCaptureDevicesEnabled-expected.txt: Added.
* platform/mac/TestExpectations:

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (240643 => 240644)


--- trunk/LayoutTests/ChangeLog	2019-01-29 06:11:43 UTC (rev 240643)
+++ trunk/LayoutTests/ChangeLog	2019-01-29 06:20:56 UTC (rev 240644)
@@ -1,3 +1,17 @@
+2019-01-28  Devin Rousso  <[email protected]>
+
+        Web Inspector: provide a way to edit page WebRTC settings on a remote target
+        https://bugs.webkit.org/show_bug.cgi?id=193863
+        <rdar://problem/47572764>
+
+        Reviewed by Joseph Pecoraro.
+
+        * inspector/page/overrideSetting-ICECandidateFilteringEnabled.html: Added.
+        * inspector/page/overrideSetting-ICECandidateFilteringEnabled-expected.txt: Added.
+        * inspector/page/overrideSetting-MockCaptureDevicesEnabled.html: Added.
+        * inspector/page/overrideSetting-MockCaptureDevicesEnabled-expected.txt: Added.
+        * platform/mac/TestExpectations:
+
 2019-01-28  Ryan Haddad  <[email protected]>
 
         REGRESSION (r240553): Crash in WebCore::ScrollingTree::updateTreeFromStateNode

Added: trunk/LayoutTests/inspector/page/overrideSetting-ICECandidateFilteringEnabled-expected.txt (0 => 240644)


--- trunk/LayoutTests/inspector/page/overrideSetting-ICECandidateFilteringEnabled-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/inspector/page/overrideSetting-ICECandidateFilteringEnabled-expected.txt	2019-01-29 06:20:56 UTC (rev 240644)
@@ -0,0 +1,11 @@
+Tests for the Page.overrideSetting command.
+
+
+== Running test suite: Page.overrideSetting
+-- Running test case: Page.overrideSetting.ICECandidateFilteringEnabled
+PASS: Should not be able to establish a connection when filtering ice candidates.
+Overriding ICECandidateFilteringEnabled to false...
+PASS: Should be able to establish a connection when filtering ice candidates.
+Removing ICECandidateFilteringEnabled override...
+PASS: Should not be able to establish a connection when filtering ice candidates.
+

Added: trunk/LayoutTests/inspector/page/overrideSetting-ICECandidateFilteringEnabled.html (0 => 240644)


--- trunk/LayoutTests/inspector/page/overrideSetting-ICECandidateFilteringEnabled.html	                        (rev 0)
+++ trunk/LayoutTests/inspector/page/overrideSetting-ICECandidateFilteringEnabled.html	2019-01-29 06:20:56 UTC (rev 240644)
@@ -0,0 +1,77 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script src=""
+<script>
+
+if (window.internals)
+    window.internals.setICECandidateFiltering(true);
+
+function createDataChannel() {
+    let receivedCandidate = false;
+
+    let pc = new RTCPeerConnection();
+    pc.createDataChannel("sendDataChannel");
+    pc._onicecandidate_ = (event) => {
+        if (event.candidate) {
+            receivedCandidate = true;
+            return;
+        }
+
+        if (receivedCandidate) {
+            pc.createOffer().then((offer) => {
+                TestPage.dispatchEventToFrontend("DataChannel", {success: true});
+            });
+        } else
+            TestPage.dispatchEventToFrontend("DataChannel", {success: false});
+
+        delete pc.onicecandidate;
+    };
+    pc.createOffer().then((offer) => {
+        pc.setLocalDescription(offer);
+    });
+}
+
+function test()
+{
+    let suite = InspectorTest.createAsyncSuite("Page.overrideSetting");
+
+    suite.addTestCase({
+        name: "Page.overrideSetting.ICECandidateFilteringEnabled",
+        description: "Test that changing whether ice candidate filtering is enabled has an effect.",
+        async test() {
+            let [defaultResult] = await Promise.all([
+                InspectorTest.awaitEvent("DataChannel"),
+                InspectorTest.evaluateInPage(`createDataChannel()`),
+            ]);
+            InspectorTest.expectFalse(defaultResult.data.success, "Should not be able to establish a connection when filtering ice candidates.");
+
+            InspectorTest.log("Overriding ICECandidateFilteringEnabled to false...");
+            await PageAgent.overrideSetting(PageAgent.Setting.ICECandidateFilteringEnabled, false);
+
+            let [overriddenResult] = await Promise.all([
+                InspectorTest.awaitEvent("DataChannel"),
+                InspectorTest.evaluateInPage(`createDataChannel()`),
+            ])
+            InspectorTest.expectFalse(defaultResult.data.success, "Should be able to establish a connection when filtering ice candidates.");
+
+            InspectorTest.log("Removing ICECandidateFilteringEnabled override...");
+            await PageAgent.overrideSetting(PageAgent.Setting.ICECandidateFilteringEnabled);
+
+            let [originalResult] = await Promise.all([
+                InspectorTest.awaitEvent("DataChannel"),
+                InspectorTest.evaluateInPage(`createDataChannel()`),
+            ])
+            InspectorTest.expectFalse(defaultResult.data.success, "Should not be able to establish a connection when filtering ice candidates.");
+        },
+    });
+
+    suite.runTestCasesAndFinish();
+}
+
+</script>
+</head>
+<body _onload_="runTest()">
+    <p>Tests for the Page.overrideSetting command.</p>
+</body>
+</html>

Added: trunk/LayoutTests/inspector/page/overrideSetting-MockCaptureDevicesEnabled-expected.txt (0 => 240644)


--- trunk/LayoutTests/inspector/page/overrideSetting-MockCaptureDevicesEnabled-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/inspector/page/overrideSetting-MockCaptureDevicesEnabled-expected.txt	2019-01-29 06:20:56 UTC (rev 240644)
@@ -0,0 +1,11 @@
+Tests for the Page.overrideSetting command.
+
+
+== Running test suite: Page.overrideSetting
+-- Running test case: Page.overrideSetting.MockCaptureDevicesEnabled
+Expected Error: The I/O read operation failed.
+Overriding MockCaptureDevicesEnabled to true...
+PASS: getUserMedia should not fail when no devices are available
+Removing MockCaptureDevicesEnabled override...
+Expected Error: The I/O read operation failed.
+

Added: trunk/LayoutTests/inspector/page/overrideSetting-MockCaptureDevicesEnabled.html (0 => 240644)


--- trunk/LayoutTests/inspector/page/overrideSetting-MockCaptureDevicesEnabled.html	                        (rev 0)
+++ trunk/LayoutTests/inspector/page/overrideSetting-MockCaptureDevicesEnabled.html	2019-01-29 06:20:56 UTC (rev 240644)
@@ -0,0 +1,58 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script src=""
+<script>
+
+if (window.internals)
+    window.internals.setMockMediaCaptureDevicesEnabled(false);
+
+function requestGetUserMedia() {
+    navigator.mediaDevices.getUserMedia({audio: {}, video: {}})
+        .then(() => TestPage.dispatchEventToFrontend("GetUserMedia", {success: true}))
+        .catch((error) => TestPage.dispatchEventToFrontend("GetUserMedia", {error: error.message}));
+}
+
+function test()
+{
+    let suite = InspectorTest.createAsyncSuite("Page.overrideSetting");
+
+    suite.addTestCase({
+        name: "Page.overrideSetting.MockCaptureDevicesEnabled",
+        description: "Test that changing whether mock capture devices are enabled has an effect.",
+        async test() {
+            let [defaultResult] = await Promise.all([
+                InspectorTest.awaitEvent("GetUserMedia"),
+                InspectorTest.evaluateInPage(`requestGetUserMedia()`),
+            ]);
+            InspectorTest.log("Expected Error: " + defaultResult.data.error);
+
+            InspectorTest.log("Overriding MockCaptureDevicesEnabled to true...");
+            await PageAgent.overrideSetting(PageAgent.Setting.MockCaptureDevicesEnabled, true);
+
+            let [overriddenResult] = await Promise.all([
+                InspectorTest.awaitEvent("GetUserMedia"),
+                InspectorTest.evaluateInPage(`requestGetUserMedia()`),
+            ])
+            InspectorTest.expectTrue(overriddenResult.data.success, "getUserMedia should not fail when no devices are available");
+
+            InspectorTest.log("Removing MockCaptureDevicesEnabled override...");
+            await PageAgent.overrideSetting(PageAgent.Setting.MockCaptureDevicesEnabled);
+
+            let [originalResult] = await Promise.all([
+                InspectorTest.awaitEvent("GetUserMedia"),
+                InspectorTest.evaluateInPage(`requestGetUserMedia()`),
+            ])
+            InspectorTest.log("Expected Error: " + originalResult.data.error);
+        },
+    });
+
+    suite.runTestCasesAndFinish();
+}
+
+</script>
+</head>
+<body _onload_="runTest()">
+    <p>Tests for the Page.overrideSetting command.</p>
+</body>
+</html>

Modified: trunk/LayoutTests/platform/mac/TestExpectations (240643 => 240644)


--- trunk/LayoutTests/platform/mac/TestExpectations	2019-01-29 06:11:43 UTC (rev 240643)
+++ trunk/LayoutTests/platform/mac/TestExpectations	2019-01-29 06:20:56 UTC (rev 240644)
@@ -146,6 +146,9 @@
 fast/mediastream/RTCPeerConnection-media-setup-callbacks-single-dialog.html [ Skip ]
 fast/mediastream/RTCPeerConnection-stats.html [ Skip ]
 
+[ HighSierra ] inspector/page/overrideSetting-ICECandidateFilteringEnabled.html [ Skip ]
+[ HighSierra ] inspector/page/overrideSetting-MockCaptureDevicesEnabled.html [ Skip ]
+
 # Asserts in debug.
 [ Debug ] fast/images/large-size-image-crash.html [ Skip ]
 

Modified: trunk/Source/_javascript_Core/ChangeLog (240643 => 240644)


--- trunk/Source/_javascript_Core/ChangeLog	2019-01-29 06:11:43 UTC (rev 240643)
+++ trunk/Source/_javascript_Core/ChangeLog	2019-01-29 06:20:56 UTC (rev 240644)
@@ -1,3 +1,17 @@
+2019-01-28  Devin Rousso  <[email protected]>
+
+        Web Inspector: provide a way to edit page WebRTC settings on a remote target
+        https://bugs.webkit.org/show_bug.cgi?id=193863
+        <rdar://problem/47572764>
+
+        Reviewed by Joseph Pecoraro.
+
+        * inspector/protocol/Page.json:
+        Add more values to the `Setting` enum type:
+         - `ICECandidateFilteringEnabled`
+         - `MediaCaptureRequiresSecureConnection`
+         - `MockCaptureDevicesEnabled`
+
 2019-01-28  Ross Kirsling  <[email protected]>
 
         Remove unnecessary `using namespace WTF`s (or at least restrict their scope).

Modified: trunk/Source/_javascript_Core/inspector/protocol/Page.json (240643 => 240644)


--- trunk/Source/_javascript_Core/inspector/protocol/Page.json	2019-01-29 06:11:43 UTC (rev 240643)
+++ trunk/Source/_javascript_Core/inspector/protocol/Page.json	2019-01-29 06:20:56 UTC (rev 240644)
@@ -9,7 +9,10 @@
             "description": "List of settings able to be overridden by WebInspector. Keep this in sync with FOR_EACH_INSPECTOR_OVERRIDE_SETTING.",
             "enum": [
                 "AuthorAndUserStylesEnabled",
+                "ICECandidateFilteringEnabled",
                 "ImagesEnabled",
+                "MediaCaptureRequiresSecureConnection",
+                "MockCaptureDevicesEnabled",
                 "NeedsSiteSpecificQuirks",
                 "ScriptEnabled",
                 "WebSecurityEnabled"

Modified: trunk/Source/WebCore/ChangeLog (240643 => 240644)


--- trunk/Source/WebCore/ChangeLog	2019-01-29 06:11:43 UTC (rev 240643)
+++ trunk/Source/WebCore/ChangeLog	2019-01-29 06:20:56 UTC (rev 240644)
@@ -1,3 +1,44 @@
+2019-01-28  Devin Rousso  <[email protected]>
+
+        Web Inspector: provide a way to edit page WebRTC settings on a remote target
+        https://bugs.webkit.org/show_bug.cgi?id=193863
+        <rdar://problem/47572764>
+
+        Reviewed by Joseph Pecoraro.
+
+        Test: inspector/page/overrideSetting-ICECandidateFilteringEnabled.html
+              inspector/page/overrideSetting-MockCaptureDevicesEnabled.html
+
+        * inspector/agents/InspectorPageAgent.cpp:
+
+        * page/Settings.yaml:
+        * page/SettingsBase.h:
+        * page/SettingsBase.cpp:
+        (SettingsBase::iceCandidateFilteringEnabledChanged): Added.
+        (SettingsBase::mockCaptureDevicesEnabledChanged): Added.
+        * Scripts/GenerateSettings.rb:
+        * Scripts/SettingsTemplates/Settings.cpp.erb:
+        Add page-level settings for WebRTC preferences.
+
+        * Modules/mediastream/UserMediaController.cpp:
+        (WebCore::UserMediaController::canCallGetUserMedia):
+
+        * testing/InternalSettings.cpp:
+        (WebCore::InternalSettings::setMediaCaptureRequiresSecureConnection):
+
+        * testing/Internals.h:
+        * testing/Internals.cpp:
+        (WebCore::Internals::Internals):
+        (WebCore::Internals::setMockMediaCaptureDevicesEnabled):
+        (WebCore::Internals::setMediaCaptureRequiresSecureConnection): Added.
+
+        * page/DeprecatedGlobalSettings.h:
+        * page/DeprecatedGlobalSettings.cpp:
+        (WebCore::DeprecatedGlobalSettings::mockCaptureDevicesEnabled): Deleted.
+        (WebCore::DeprecatedGlobalSettings::setMockCaptureDevicesEnabled): Deleted.
+        (WebCore::DeprecatedGlobalSettings::mediaCaptureRequiresSecureConnection): Deleted.
+        (WebCore::DeprecatedGlobalSettings::setMediaCaptureRequiresSecureConnection): Deleted.
+
 2019-01-28  Jer Noble  <[email protected]>
 
         webkitcurrentplaybacktargetiswirelesschanged and webkitCurrentPlaybackIsWireless are non-deterministic.

Modified: trunk/Source/WebCore/Modules/mediastream/UserMediaController.cpp (240643 => 240644)


--- trunk/Source/WebCore/Modules/mediastream/UserMediaController.cpp	2019-01-29 06:11:43 UTC (rev 240643)
+++ trunk/Source/WebCore/Modules/mediastream/UserMediaController.cpp	2019-01-29 06:20:56 UTC (rev 240644)
@@ -29,7 +29,6 @@
 #if ENABLE(MEDIA_STREAM)
 
 #include "DOMWindow.h"
-#include "DeprecatedGlobalSettings.h"
 #include "Document.h"
 #include "DocumentLoader.h"
 #include "Frame.h"
@@ -36,6 +35,7 @@
 #include "HTMLIFrameElement.h"
 #include "HTMLParserIdioms.h"
 #include "SchemeRegistry.h"
+#include "Settings.h"
 #include "UserMediaRequest.h"
 
 namespace WebCore {
@@ -113,7 +113,9 @@
 {
     ASSERT(!types.isEmpty());
 
-    bool requiresSecureConnection = DeprecatedGlobalSettings::mediaCaptureRequiresSecureConnection();
+    bool requiresSecureConnection = true;
+    if (auto page = document.page())
+        requiresSecureConnection = page->settings().mediaCaptureRequiresSecureConnection();
     auto& documentLoader = *document.loader();
     if (requiresSecureConnection && !isSecure(documentLoader))
         return GetUserMediaAccess::InsecureDocument;

Modified: trunk/Source/WebCore/Scripts/GenerateSettings.rb (240643 => 240644)


--- trunk/Source/WebCore/Scripts/GenerateSettings.rb	2019-01-29 06:11:43 UTC (rev 240643)
+++ trunk/Source/WebCore/Scripts/GenerateSettings.rb	2019-01-29 06:20:56 UTC (rev 240644)
@@ -120,7 +120,7 @@
   end
 
   def setterFunctionName
-    if @name.start_with?("css", "xss", "ftp", "dom", "dns")
+    if @name.start_with?("css", "xss", "ftp", "dom", "dns", "ice")
       "set" + @name[0..2].upcase + @name[[email protected]]
     else
       "set" + @name[0].upcase + @name[[email protected]]

Modified: trunk/Source/WebCore/Scripts/SettingsTemplates/Settings.cpp.erb (240643 => 240644)


--- trunk/Source/WebCore/Scripts/SettingsTemplates/Settings.cpp.erb	2019-01-29 06:11:43 UTC (rev 240643)
+++ trunk/Source/WebCore/Scripts/SettingsTemplates/Settings.cpp.erb	2019-01-29 06:20:56 UTC (rev 240644)
@@ -125,7 +125,13 @@
     if (m_<%= @setting.name %>InspectorOverride == <%= @setting.name %>InspectorOverride)
         return;
     m_<%= @setting.name %>InspectorOverride = <%= @setting.name %>InspectorOverride;
+<%- if @setting.conditional -%>
+#if ENABLE(<%= @setting.conditional %>)
+<%- end -%>
     <%= @setting.onChange %>();
+<%- if @setting.conditional -%>
+#endif
+<%- end -%>
 }
 
 <%- end -%>

Modified: trunk/Source/WebCore/inspector/agents/InspectorPageAgent.cpp (240643 => 240644)


--- trunk/Source/WebCore/inspector/agents/InspectorPageAgent.cpp	2019-01-29 06:11:43 UTC (rev 240643)
+++ trunk/Source/WebCore/inspector/agents/InspectorPageAgent.cpp	2019-01-29 06:20:56 UTC (rev 240644)
@@ -83,9 +83,13 @@
 
 using namespace Inspector;
 
+// Keep this in sync with Page.Setting
 #define FOR_EACH_INSPECTOR_OVERRIDE_SETTING(macro) \
     macro(AuthorAndUserStylesEnabled) \
+    macro(ICECandidateFilteringEnabled) \
     macro(ImagesEnabled) \
+    macro(MediaCaptureRequiresSecureConnection) \
+    macro(MockCaptureDevicesEnabled) \
     macro(NeedsSiteSpecificQuirks) \
     macro(ScriptEnabled) \
     macro(WebSecurityEnabled)

Modified: trunk/Source/WebCore/page/DeprecatedGlobalSettings.cpp (240643 => 240644)


--- trunk/Source/WebCore/page/DeprecatedGlobalSettings.cpp	2019-01-29 06:11:43 UTC (rev 240643)
+++ trunk/Source/WebCore/page/DeprecatedGlobalSettings.cpp	2019-01-29 06:20:56 UTC (rev 240644)
@@ -31,11 +31,6 @@
 #include "RuntimeApplicationChecks.h"
 #include <wtf/NeverDestroyed.h>
 
-#if ENABLE(MEDIA_STREAM)
-#include "MockRealtimeMediaSourceCenter.h"
-
-#endif
-
 namespace WebCore {
 
 #if USE(AVFOUNDATION)
@@ -51,11 +46,6 @@
 bool DeprecatedGlobalSettings::gUsesOverlayScrollbars = false;
 bool DeprecatedGlobalSettings::gMockScrollAnimatorEnabled = false;
 
-#if ENABLE(MEDIA_STREAM)
-bool DeprecatedGlobalSettings::gMockCaptureDevicesEnabled = false;
-bool DeprecatedGlobalSettings::gMediaCaptureRequiresSecureConnection = true;
-#endif
-
 #if PLATFORM(WIN)
 bool DeprecatedGlobalSettings::gShouldUseHighResolutionTimers = true;
 #endif
@@ -113,29 +103,6 @@
 }
 #endif
 
-#if ENABLE(MEDIA_STREAM)
-bool DeprecatedGlobalSettings::mockCaptureDevicesEnabled()
-{
-    return gMockCaptureDevicesEnabled;
-}
-
-void DeprecatedGlobalSettings::setMockCaptureDevicesEnabled(bool enabled)
-{
-    gMockCaptureDevicesEnabled = enabled;
-    MockRealtimeMediaSourceCenter::setMockRealtimeMediaSourceCenterEnabled(enabled);
-}
-
-bool DeprecatedGlobalSettings::mediaCaptureRequiresSecureConnection()
-{
-    return gMediaCaptureRequiresSecureConnection;
-}
-
-void DeprecatedGlobalSettings::setMediaCaptureRequiresSecureConnection(bool mediaCaptureRequiresSecureConnection)
-{
-    gMediaCaptureRequiresSecureConnection = mediaCaptureRequiresSecureConnection;
-}
-#endif
-
 // It's very important that this setting doesn't change in the middle of a document's lifetime.
 // The Mac port uses this flag when registering and deregistering platform-dependent scrollbar
 // objects. Therefore, if this changes at an unexpected time, deregistration may not happen

Modified: trunk/Source/WebCore/page/DeprecatedGlobalSettings.h (240643 => 240644)


--- trunk/Source/WebCore/page/DeprecatedGlobalSettings.h	2019-01-29 06:11:43 UTC (rev 240643)
+++ trunk/Source/WebCore/page/DeprecatedGlobalSettings.h	2019-01-29 06:20:56 UTC (rev 240644)
@@ -103,15 +103,7 @@
     static void setShouldManageAudioSessionCategory(bool flag) { gManageAudioSession = flag; }
     static bool shouldManageAudioSessionCategory() { return gManageAudioSession; }
 #endif
-    
-#if ENABLE(MEDIA_STREAM)
-    static bool mockCaptureDevicesEnabled();
-    WEBCORE_EXPORT static void setMockCaptureDevicesEnabled(bool);
 
-    static bool mediaCaptureRequiresSecureConnection();
-    WEBCORE_EXPORT static void setMediaCaptureRequiresSecureConnection(bool);
-#endif
-
     WEBCORE_EXPORT static void setAllowsAnySSLCertificate(bool);
     static bool allowsAnySSLCertificate();
 
@@ -140,11 +132,6 @@
     WEBCORE_EXPORT static bool gDisableScreenSizeOverride;
 #endif
     WEBCORE_EXPORT static bool gManageAudioSession;
-    
-#if ENABLE(MEDIA_STREAM)
-    static bool gMockCaptureDevicesEnabled;
-    static bool gMediaCaptureRequiresSecureConnection;
-#endif
 
     static bool gLowPowerVideoAudioBufferSizeEnabled;
     static bool gResourceLoadStatisticsEnabledEnabled;

Modified: trunk/Source/WebCore/page/Settings.yaml (240643 => 240644)


--- trunk/Source/WebCore/page/Settings.yaml	2019-01-29 06:11:43 UTC (rev 240643)
+++ trunk/Source/WebCore/page/Settings.yaml	2019-01-29 06:20:56 UTC (rev 240644)
@@ -796,3 +796,21 @@
 
 adClickAttributionEnabled:
   initial: false
+
+# Deprecated
+
+iceCandidateFilteringEnabled:
+  initial: true
+  onChange: iceCandidateFilteringEnabledChanged
+  inspectorOverride: true
+
+mockCaptureDevicesEnabled:
+  initial: false
+  conditional: MEDIA_STREAM
+  onChange: mockCaptureDevicesEnabledChanged
+  inspectorOverride: true
+
+mediaCaptureRequiresSecureConnection:
+  initial: true
+  conditional: MEDIA_STREAM
+  inspectorOverride: true

Modified: trunk/Source/WebCore/page/SettingsBase.cpp (240643 => 240644)


--- trunk/Source/WebCore/page/SettingsBase.cpp	2019-01-29 06:11:43 UTC (rev 240643)
+++ trunk/Source/WebCore/page/SettingsBase.cpp	2019-01-29 06:20:56 UTC (rev 240644)
@@ -48,6 +48,10 @@
 #include <limits>
 #include <wtf/StdLibExtras.h>
 
+#if ENABLE(MEDIA_STREAM)
+#include "MockRealtimeMediaSourceCenter.h"
+#endif
+
 namespace WebCore {
 
 static void invalidateAfterGenericFamilyChange(Page* page)
@@ -304,6 +308,17 @@
     Page::refreshPlugins(false);
 }
 
+void SettingsBase::iceCandidateFilteringEnabledChanged()
+{
+    if (!m_page)
+        return;
+
+    if (m_page->settings().iceCandidateFilteringEnabled())
+        m_page->enableICECandidateFiltering();
+    else
+        m_page->disableICECandidateFiltering();
+}
+
 #if ENABLE(TEXT_AUTOSIZING)
 
 void SettingsBase::shouldEnableTextAutosizingBoostChanged()
@@ -321,6 +336,17 @@
 
 #endif
 
+#if ENABLE(MEDIA_STREAM)
+void SettingsBase::mockCaptureDevicesEnabledChanged()
+{
+    bool enabled = false;
+    if (m_page)
+        enabled = m_page->settings().mockCaptureDevicesEnabled();
+
+    MockRealtimeMediaSourceCenter::setMockRealtimeMediaSourceCenterEnabled(enabled);
+}
+#endif
+
 void SettingsBase::userStyleSheetLocationChanged()
 {
     if (m_page)

Modified: trunk/Source/WebCore/page/SettingsBase.h (240643 => 240644)


--- trunk/Source/WebCore/page/SettingsBase.h	2019-01-29 06:11:43 UTC (rev 240643)
+++ trunk/Source/WebCore/page/SettingsBase.h	2019-01-29 06:20:56 UTC (rev 240644)
@@ -192,9 +192,13 @@
     void hiddenPageDOMTimerThrottlingStateChanged();
     void hiddenPageCSSAnimationSuspensionEnabledChanged();
     void resourceUsageOverlayVisibleChanged();
+    void iceCandidateFilteringEnabledChanged();
 #if ENABLE(TEXT_AUTOSIZING)
     void shouldEnableTextAutosizingBoostChanged();
 #endif
+#if ENABLE(MEDIA_STREAM)
+    void mockCaptureDevicesEnabledChanged();
+#endif
 
     Page* m_page;
 

Modified: trunk/Source/WebCore/page/SettingsDefaultValues.h (240643 => 240644)


--- trunk/Source/WebCore/page/SettingsDefaultValues.h	2019-01-29 06:11:43 UTC (rev 240643)
+++ trunk/Source/WebCore/page/SettingsDefaultValues.h	2019-01-29 06:20:56 UTC (rev 240644)
@@ -109,6 +109,5 @@
 #else
 static const bool defaultConicGradient = false;
 #endif
-    
 
 }

Modified: trunk/Source/WebCore/testing/InternalSettings.cpp (240643 => 240644)


--- trunk/Source/WebCore/testing/InternalSettings.cpp	2019-01-29 06:11:43 UTC (rev 240643)
+++ trunk/Source/WebCore/testing/InternalSettings.cpp	2019-01-29 06:20:56 UTC (rev 240644)
@@ -462,7 +462,7 @@
     if (!m_page)
         return Exception { InvalidAccessError };
 #if ENABLE(MEDIA_STREAM)
-    DeprecatedGlobalSettings::setMediaCaptureRequiresSecureConnection(requires);
+    m_page->settings().setMediaCaptureRequiresSecureConnection(requires);
 #else
     UNUSED_PARAM(requires);
 #endif

Modified: trunk/Source/WebCore/testing/Internals.cpp (240643 => 240644)


--- trunk/Source/WebCore/testing/Internals.cpp	2019-01-29 06:11:43 UTC (rev 240643)
+++ trunk/Source/WebCore/testing/Internals.cpp	2019-01-29 06:20:56 UTC (rev 240644)
@@ -534,7 +534,7 @@
 
 #if ENABLE(MEDIA_STREAM)
     setMockMediaCaptureDevicesEnabled(true);
-    WebCore::DeprecatedGlobalSettings::setMediaCaptureRequiresSecureConnection(false);
+    setMediaCaptureRequiresSecureConnection(false);
 #endif
 
 #if ENABLE(WIRELESS_PLAYBACK_TARGET)
@@ -1472,9 +1472,18 @@
 
 void Internals::setMockMediaCaptureDevicesEnabled(bool enabled)
 {
-    WebCore::DeprecatedGlobalSettings::setMockCaptureDevicesEnabled(enabled);
+    Document* document = contextDocument();
+    if (auto* page = document->page())
+        page->settings().setMockCaptureDevicesEnabled(enabled);
 }
 
+void Internals::setMediaCaptureRequiresSecureConnection(bool enabled)
+{
+    Document* document = contextDocument();
+    if (auto* page = document->page())
+        page->settings().setMediaCaptureRequiresSecureConnection(enabled);
+}
+
 static std::unique_ptr<MediaRecorderPrivate> createRecorderMockSource()
 {
     return std::unique_ptr<MediaRecorderPrivateMock>(new MediaRecorderPrivateMock);

Modified: trunk/Source/WebCore/testing/Internals.h (240643 => 240644)


--- trunk/Source/WebCore/testing/Internals.h	2019-01-29 06:11:43 UTC (rev 240643)
+++ trunk/Source/WebCore/testing/Internals.h	2019-01-29 06:20:56 UTC (rev 240644)
@@ -507,6 +507,7 @@
 
 #if ENABLE(MEDIA_STREAM)
     void setMockMediaCaptureDevicesEnabled(bool);
+    void setMediaCaptureRequiresSecureConnection(bool);
     void setCustomPrivateRecorderCreator();
 #endif
 

Modified: trunk/Source/WebInspectorUI/ChangeLog (240643 => 240644)


--- trunk/Source/WebInspectorUI/ChangeLog	2019-01-29 06:11:43 UTC (rev 240643)
+++ trunk/Source/WebInspectorUI/ChangeLog	2019-01-29 06:20:56 UTC (rev 240644)
@@ -1,3 +1,22 @@
+2019-01-28  Devin Rousso  <[email protected]>
+
+        Web Inspector: provide a way to edit page WebRTC settings on a remote target
+        https://bugs.webkit.org/show_bug.cgi?id=193863
+        <rdar://problem/47572764>
+
+        Reviewed by Joseph Pecoraro.
+
+        * UserInterface/Base/Main.js:
+        (WI.loaded):
+        (WI.initializeTarget):
+        (WI._handleDeviceSettingsToolbarButtonClicked):
+        (WI._handleDeviceSettingsToolbarButtonClicked.createCheckbox):
+        (WI._handleDeviceSettingsToolbarButtonClicked.createColumns): Deleted.
+        * UserInterface/Views/Main.css:
+        (.device-settings-content .container): Added.
+
+        * Localizations/en.lproj/localizedStrings.js:
+
 2019-01-28  Matt Baker  <[email protected]>
 
         Web Inspector: Elements tab should toggle visibility for all selected nodes

Modified: trunk/Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js (240643 => 240644)


--- trunk/Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js	2019-01-29 06:11:43 UTC (rev 240643)
+++ trunk/Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js	2019-01-29 06:20:56 UTC (rev 240644)
@@ -59,6 +59,7 @@
 localizedStrings["%s delay"] = "%s delay";
 localizedStrings["%s eval\n%s async"] = "%s eval\n%s async";
 localizedStrings["%s interval"] = "%s interval";
+localizedStrings["%s:"] = "%s:";
 localizedStrings["(Action %s)"] = "(Action %s)";
 localizedStrings["(Disk)"] = "(Disk)";
 localizedStrings["(Index)"] = "(Index)";
@@ -104,6 +105,7 @@
 localizedStrings["All items in \u0022%s\u0022 must be error objects"] = "All items in \u0022%s\u0022 must be error objects";
 localizedStrings["All items in \u0022%s\u0022 must be non-empty strings"] = "All items in \u0022%s\u0022 must be non-empty strings";
 localizedStrings["All items in \u0022%s\u0022 must be valid DOM nodes"] = "All items in \u0022%s\u0022 must be valid DOM nodes";
+localizedStrings["Allow Media Capture on Insecure Sites"] = "Allow Media Capture on Insecure Sites";
 localizedStrings["An error occurred trying to load the resource."] = "An error occurred trying to load the resource.";
 localizedStrings["An error occurred trying to read the \u201C%s\u201D table."] = "An error occurred trying to read the \u201C%s\u201D table.";
 localizedStrings["An unexpected error %s occurred."] = "An unexpected error %s occurred.";
@@ -304,6 +306,7 @@
 localizedStrings["Disable Breakpoint"] = "Disable Breakpoint";
 localizedStrings["Disable Breakpoints"] = "Disable Breakpoints";
 localizedStrings["Disable Event Listener"] = "Disable Event Listener";
+localizedStrings["Disable ICE Candidate Restrictions"] = "Disable ICE Candidate Restrictions";
 localizedStrings["Disable Program"] = "Disable Program";
 localizedStrings["Disable all breakpoints (%s)"] = "Disable all breakpoints (%s)";
 localizedStrings["Disable paint flashing"] = "Disable paint flashing";
@@ -1023,6 +1026,7 @@
 localizedStrings["Untitled"] = "Untitled";
 localizedStrings["Use Default Appearance"] = "Use Default Appearance";
 localizedStrings["Use Default Media Styles"] = "Use Default Media Styles";
+localizedStrings["Use Mock Capture Devices"] = "Use Mock Capture Devices";
 localizedStrings["Use the resource cache when loading resources"] = "Use the resource cache when loading resources";
 localizedStrings["User Agent"] = "User Agent";
 localizedStrings["User Agent Stylesheet"] = "User Agent Stylesheet";

Modified: trunk/Source/WebInspectorUI/UserInterface/Base/Main.js (240643 => 240644)


--- trunk/Source/WebInspectorUI/UserInterface/Base/Main.js	2019-01-29 06:11:43 UTC (rev 240643)
+++ trunk/Source/WebInspectorUI/UserInterface/Base/Main.js	2019-01-29 06:20:56 UTC (rev 240644)
@@ -162,7 +162,7 @@
     this._windowKeydownListeners = [];
     this._targetsAvailablePromise = new WI.WrappedPromise;
     WI._overridenDeviceUserAgent = null;
-    WI._overridenDeviceSettings = new Set;
+    WI._overridenDeviceSettings = new Map;
 
     // Targets.
     WI.backendTarget = null;
@@ -612,8 +612,8 @@
 
         // COMPATIBILITY (iOS 12.2): Page.overrideSetting did not exist.
         if (target.PageAgent.overrideSetting) {
-            for (let setting of WI._overridenDeviceSettings)
-                target.PageAgent.overrideSetting(setting, true);
+            for (let [setting, value] of WI._overridenDeviceSettings)
+                target.PageAgent.overrideSetting(setting, value);
         }
 
         // COMPATIBILITY (iOS 8): Page.setShowPaintRects did not exist.
@@ -1990,7 +1990,7 @@
         }
     }
 
-    function applyOverriddenSetting(setting, callback) {
+    function applyOverriddenSetting(setting, value, callback) {
         if (WI._overridenDeviceSettings.has(setting)) {
             // We've just "disabled" the checkbox, so clear the override instead of applying it.
             PageAgent.overrideSetting(setting, (error) => {
@@ -2004,8 +2004,6 @@
                 updateActivatedState();
             });
         } else {
-            // Override to false since the labels are the inverse of the setting.
-            const value = false;
             PageAgent.overrideSetting(setting, value, (error) => {
                 if (error) {
                     console.error(error);
@@ -2012,7 +2010,7 @@
                     return;
                 }
 
-                WI._overridenDeviceSettings.add(setting);
+                WI._overridenDeviceSettings.set(setting, value);
                 callback(true);
                 updateActivatedState();
             });
@@ -2031,20 +2029,10 @@
         return container;
     }
 
-    function createColumns(parent, count) {
-        let columnContainer = parent.appendChild(document.createElement("div"));
-        columnContainer.classList.add("columns");
+    function createCheckbox(container, label, setting, value) {
+        if (!setting)
+            return;
 
-        let columns = [];
-        for (let i = 0; i < count; ++i) {
-            let column = columnContainer.appendChild(document.createElement("div"));
-            column.classList.add("column");
-            columns.push(column);
-        }
-        return columns;
-    }
-
-    function createCheckbox(container, label, setting) {
         let labelElement = container.appendChild(document.createElement("label"));
 
         let checkboxElement = labelElement.appendChild(document.createElement("input"));
@@ -2051,7 +2039,7 @@
         checkboxElement.type = "checkbox";
         checkboxElement.checked = WI._overridenDeviceSettings.has(setting);
         checkboxElement.addEventListener("change", (event) => {
-            applyOverriddenSetting(setting, (enabled) => {
+            applyOverriddenSetting(setting, value, (enabled) => {
                 checkboxElement.checked = enabled;
             });
         });
@@ -2168,13 +2156,51 @@
         }
     });
 
-    let disableColumns = createColumns(createContainer(contentElement, WI.UIString("Disable:")), 2);
-    createCheckbox(disableColumns[0], WI.UIString("Images"), PageAgent.Setting.ImagesEnabled);
-    createCheckbox(disableColumns[0], WI.UIString("Styles"), PageAgent.Setting.AuthorAndUserStylesEnabled);
-    createCheckbox(disableColumns[0], WI.UIString("_javascript_"), PageAgent.Setting.ScriptEnabled);
-    createCheckbox(disableColumns[1], WI.UIString("Site-specific Hacks"), PageAgent.Setting.NeedsSiteSpecificQuirks);
-    createCheckbox(disableColumns[1], WI.UIString("Cross-Origin Restrictions"), PageAgent.Setting.WebSecurityEnabled);
+    const settings = [
+        {
+            name: WI.UIString("Disable:"),
+            columns: [
+                [
+                    {name: WI.UIString("Images"), setting: PageAgent.Setting.ImagesEnabled, value: false},
+                    {name: WI.UIString("Styles"), setting: PageAgent.Setting.AuthorAndUserStylesEnabled, value: false},
+                    {name: WI.UIString("_javascript_"), setting: PageAgent.Setting.ScriptEnabled, value: false},
+                ],
+                [
+                    {name: WI.UIString("Site-specific Hacks"), setting: PageAgent.Setting.NeedsSiteSpecificQuirks, value: false},
+                    {name: WI.UIString("Cross-Origin Restrictions"), setting: PageAgent.Setting.WebSecurityEnabled, value: false},
+                ]
+            ],
+        },
+        {
+            name: WI.UIString("%s:").format(WI.unlocalizedString("WebRTC")),
+            columns: [
+                [
+                    {name: WI.UIString("Allow Media Capture on Insecure Sites"), setting: PageAgent.Setting.MediaCaptureRequiresSecureConnection, value: false},
+                    {name: WI.UIString("Disable ICE Candidate Restrictions"), setting: PageAgent.Setting.ICECandidateFilteringEnabled, value: false},
+                    {name: WI.UIString("Use Mock Capture Devices"), setting: PageAgent.Setting.MockCaptureDevicesEnabled, value: true},
+                ],
+            ],
+        },
+    ];
 
+    for (let group of settings) {
+        if (!group.columns.some((column) => column.some((item) => item.setting)))
+            continue;
+
+        let container = createContainer(contentElement, group.name);
+
+        let columnContainer = container.appendChild(document.createElement("div"));
+        columnContainer.classList.add("columns");
+
+        for (let column of group.columns) {
+            let columnElement = columnContainer.appendChild(document.createElement("div"));
+            columnElement.classList.add("column");
+
+            for (let item of column)
+                createCheckbox(columnElement, item.name, item.setting, item.value);
+        }
+    }
+
     WI._deviceSettingsPopover.presentNewContentWithFrame(contentElement, calculateTargetFrame(), preferredEdges);
 };
 

Modified: trunk/Source/WebInspectorUI/UserInterface/Views/Main.css (240643 => 240644)


--- trunk/Source/WebInspectorUI/UserInterface/Views/Main.css	2019-01-29 06:11:43 UTC (rev 240643)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/Main.css	2019-01-29 06:20:56 UTC (rev 240644)
@@ -391,6 +391,10 @@
     padding: 8px;
 }
 
+.device-settings-content .container {
+    margin-top: 8px;
+}
+
 .device-settings-content .columns {
     display: flex;
 }

Modified: trunk/Source/WebKit/ChangeLog (240643 => 240644)


--- trunk/Source/WebKit/ChangeLog	2019-01-29 06:11:43 UTC (rev 240643)
+++ trunk/Source/WebKit/ChangeLog	2019-01-29 06:20:56 UTC (rev 240644)
@@ -1,3 +1,14 @@
+2019-01-28  Devin Rousso  <[email protected]>
+
+        Web Inspector: provide a way to edit page WebRTC settings on a remote target
+        https://bugs.webkit.org/show_bug.cgi?id=193863
+        <rdar://problem/47572764>
+
+        Reviewed by Joseph Pecoraro.
+
+        * Shared/WebPreferences.yaml:
+        Add page-level settings for WebRTC preferences.
+
 2019-01-28  Ross Kirsling  <[email protected]>
 
         Remove unnecessary `using namespace WTF`s (or at least restrict their scope).

Modified: trunk/Source/WebKit/Shared/WebPreferences.yaml (240643 => 240644)


--- trunk/Source/WebKit/Shared/WebPreferences.yaml	2019-01-29 06:11:43 UTC (rev 240643)
+++ trunk/Source/WebKit/Shared/WebPreferences.yaml	2019-01-29 06:20:56 UTC (rev 240644)
@@ -629,23 +629,11 @@
   defaultValue: true
   webcoreName: httpEquivEnabled
 
-MockCaptureDevicesEnabled:
-  type: bool
-  defaultValue: DEFAULT_MOCK_CAPTURE_DEVICES_ENABLED
-  webcoreBinding: DeprecatedGlobalSettings
-  condition: ENABLE(MEDIA_STREAM)
-
 MockCaptureDevicesPromptEnabled:
   type: bool
   defaultValue: true
   webcoreBinding: none
 
-MediaCaptureRequiresSecureConnection:
-  type: bool
-  defaultValue: true
-  webcoreBinding: DeprecatedGlobalSettings
-  condition: ENABLE(MEDIA_STREAM)
-
 # FIXME: What is this for?
 EnumeratingAllNetworkInterfacesEnabled:
   type: bool
@@ -652,12 +640,6 @@
   defaultValue: false
   webcoreBinding: none
 
-# FIXME: What is this for?
-ICECandidateFilteringEnabled:
-  type: bool
-  defaultValue: true
-  webcoreBinding: none
-
 ShadowDOMEnabled:
   type: bool
   defaultValue: true
@@ -1551,3 +1533,19 @@
   humanReadableDescription: "Enable Ad Click Attribution for Cross-Site Link Navigations"
   webcoreBinding: RuntimeEnabledFeatures
   category: internal
+
+# Deprecated
+
+ICECandidateFilteringEnabled:
+  type: bool
+  defaultValue: true
+
+MockCaptureDevicesEnabled:
+  type: bool
+  defaultValue: DEFAULT_MOCK_CAPTURE_DEVICES_ENABLED
+  condition: ENABLE(MEDIA_STREAM)
+
+MediaCaptureRequiresSecureConnection:
+  type: bool
+  defaultValue: true
+  condition: ENABLE(MEDIA_STREAM)

Modified: trunk/Source/WebKitLegacy/mac/ChangeLog (240643 => 240644)


--- trunk/Source/WebKitLegacy/mac/ChangeLog	2019-01-29 06:11:43 UTC (rev 240643)
+++ trunk/Source/WebKitLegacy/mac/ChangeLog	2019-01-29 06:20:56 UTC (rev 240644)
@@ -1,3 +1,15 @@
+2019-01-28  Devin Rousso  <[email protected]>
+
+        Web Inspector: provide a way to edit page WebRTC settings on a remote target
+        https://bugs.webkit.org/show_bug.cgi?id=193863
+        <rdar://problem/47572764>
+
+        Reviewed by Joseph Pecoraro.
+
+        * WebView/WebView.mm:
+        (-[WebView _preferencesChanged:]):
+        Add page-level settings for WebRTC preferences.
+
 2019-01-28  Andy Estes  <[email protected]>
 
         [watchOS] Enable Parental Controls content filtering

Modified: trunk/Source/WebKitLegacy/mac/WebView/WebView.mm (240643 => 240644)


--- trunk/Source/WebKitLegacy/mac/WebView/WebView.mm	2019-01-29 06:11:43 UTC (rev 240643)
+++ trunk/Source/WebKitLegacy/mac/WebView/WebView.mm	2019-01-29 06:20:56 UTC (rev 240644)
@@ -3057,8 +3057,8 @@
 #endif
 
 #if ENABLE(MEDIA_STREAM)
-    DeprecatedGlobalSettings::setMockCaptureDevicesEnabled(false);
-    DeprecatedGlobalSettings::setMediaCaptureRequiresSecureConnection(true);
+    settings.setMockCaptureDevicesEnabled(false);
+    settings.setMediaCaptureRequiresSecureConnection(true);
     RuntimeEnabledFeatures::sharedFeatures().setMediaStreamEnabled(false);
     RuntimeEnabledFeatures::sharedFeatures().setMediaDevicesEnabled(false);
     RuntimeEnabledFeatures::sharedFeatures().setMediaRecorderEnabled(preferences.mediaRecorderEnabled);
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to