Title: [221943] trunk/Source/WebInspectorUI
Revision
221943
Author
[email protected]
Date
2017-09-12 16:20:54 -0700 (Tue, 12 Sep 2017)

Log Message

Web Inspector: Add Experimental setting for new Network tab
https://bugs.webkit.org/show_bug.cgi?id=176750

Patch by Joseph Pecoraro <[email protected]> on 2017-09-12
Reviewed by Matt Baker.

* Localizations/en.lproj/localizedStrings.js:
* UserInterface/Main.html:
* UserInterface/Base/Main.js:
(WI.contentLoaded):
New files and strings.

* UserInterface/Base/Setting.js:
New experimental setting.

* UserInterface/Views/LegacyNetworkTabContentView.js:
(WI.LegacyNetworkTabContentView.isTabAllowed):
Legacy tab availability depends on the setting.

* UserInterface/Views/NetworkTabContentView.js:
(WI.NetworkTabContentView):
(WI.NetworkTabContentView.isTabAllowed):
(WI.NetworkTabContentView.prototype.get contentBrowser):
(WI.NetworkTabContentView.prototype.get type):
(WI.NetworkTabContentView.prototype.canShowRepresentedObject):
(WI.NetworkTabContentView.prototype.get supportsSplitContentBrowser):
Modern network tab. Only difference right now is it allows the split console.

* UserInterface/Views/NetworkTableContentView.js: Added.
(WI.NetworkTableContentView):
(WI.NetworkTableContentView.prototype.get selectionPathComponents):
(WI.NetworkTableContentView.prototype.get navigationItems):
(WI.NetworkTableContentView.prototype.shown):
(WI.NetworkTableContentView.prototype.hidden):
(WI.NetworkTableContentView.prototype.closed):
(WI.NetworkTableContentView.prototype.reset):
(WI.NetworkTableContentView.prototype.layout):
(WI.NetworkTableContentView.prototype.handleClearShortcut):
(WI.NetworkTableContentView.prototype._resourceCachingDisabledSettingChanged):
(WI.NetworkTableContentView.prototype._toggleDisableResourceCache):
Add a stubbed out ContentView. This will be implemented next.

* UserInterface/Views/SettingsTabContentView.js:
(WI.SettingsTabContentView.prototype._createExperimentalSettingsView):
Add an experimental setting to toggle the new network tab. Only
show the experimental settings that relate to the debuggable target.
For JSContext targets, none of the settings are applicable, so don't
even show the experimental section.

* UserInterface/Views/TabBrowser.js:
(WI.TabBrowser.prototype.bestTabContentViewForRepresentedObject):
Treat all network tabs the same.

Modified Paths

Added Paths

Diff

Modified: trunk/Source/WebInspectorUI/ChangeLog (221942 => 221943)


--- trunk/Source/WebInspectorUI/ChangeLog	2017-09-12 23:13:17 UTC (rev 221942)
+++ trunk/Source/WebInspectorUI/ChangeLog	2017-09-12 23:20:54 UTC (rev 221943)
@@ -1,3 +1,57 @@
+2017-09-12  Joseph Pecoraro  <[email protected]>
+
+        Web Inspector: Add Experimental setting for new Network tab
+        https://bugs.webkit.org/show_bug.cgi?id=176750
+
+        Reviewed by Matt Baker.
+
+        * Localizations/en.lproj/localizedStrings.js:
+        * UserInterface/Main.html:
+        * UserInterface/Base/Main.js:
+        (WI.contentLoaded):
+        New files and strings.
+
+        * UserInterface/Base/Setting.js:
+        New experimental setting.
+
+        * UserInterface/Views/LegacyNetworkTabContentView.js:
+        (WI.LegacyNetworkTabContentView.isTabAllowed):
+        Legacy tab availability depends on the setting.
+
+        * UserInterface/Views/NetworkTabContentView.js:
+        (WI.NetworkTabContentView):
+        (WI.NetworkTabContentView.isTabAllowed):
+        (WI.NetworkTabContentView.prototype.get contentBrowser):
+        (WI.NetworkTabContentView.prototype.get type):
+        (WI.NetworkTabContentView.prototype.canShowRepresentedObject):
+        (WI.NetworkTabContentView.prototype.get supportsSplitContentBrowser):
+        Modern network tab. Only difference right now is it allows the split console.
+
+        * UserInterface/Views/NetworkTableContentView.js: Added.
+        (WI.NetworkTableContentView):
+        (WI.NetworkTableContentView.prototype.get selectionPathComponents):
+        (WI.NetworkTableContentView.prototype.get navigationItems):
+        (WI.NetworkTableContentView.prototype.shown):
+        (WI.NetworkTableContentView.prototype.hidden):
+        (WI.NetworkTableContentView.prototype.closed):
+        (WI.NetworkTableContentView.prototype.reset):
+        (WI.NetworkTableContentView.prototype.layout):
+        (WI.NetworkTableContentView.prototype.handleClearShortcut):
+        (WI.NetworkTableContentView.prototype._resourceCachingDisabledSettingChanged):
+        (WI.NetworkTableContentView.prototype._toggleDisableResourceCache):
+        Add a stubbed out ContentView. This will be implemented next.
+
+        * UserInterface/Views/SettingsTabContentView.js:
+        (WI.SettingsTabContentView.prototype._createExperimentalSettingsView):
+        Add an experimental setting to toggle the new network tab. Only
+        show the experimental settings that relate to the debuggable target.
+        For JSContext targets, none of the settings are applicable, so don't
+        even show the experimental section.
+
+        * UserInterface/Views/TabBrowser.js:
+        (WI.TabBrowser.prototype.bestTabContentViewForRepresentedObject):
+        Treat all network tabs the same.
+
 2017-09-11  Matt Baker  <[email protected]>
 
         Web Inspector: Canvas: improve recording controls and state management

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


--- trunk/Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js	2017-09-12 23:13:17 UTC (rev 221942)
+++ trunk/Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js	2017-09-12 23:20:54 UTC (rev 221943)
@@ -568,7 +568,9 @@
 localizedStrings["Network"] = "Network";
 localizedStrings["Network Issue"] = "Network Issue";
 localizedStrings["Network Requests"] = "Network Requests";
+localizedStrings["Network Tab:"] = "Network Tab:";
 localizedStrings["Network:"] = "Network:";
+localizedStrings["New Network Tab"] = "New Network Tab";
 localizedStrings["New Tab"] = "New Tab";
 localizedStrings["No"] = "No";
 localizedStrings["No Accessibility Information"] = "No Accessibility Information";

Modified: trunk/Source/WebInspectorUI/UserInterface/Base/Main.js (221942 => 221943)


--- trunk/Source/WebInspectorUI/UserInterface/Base/Main.js	2017-09-12 23:13:17 UTC (rev 221942)
+++ trunk/Source/WebInspectorUI/UserInterface/Base/Main.js	2017-09-12 23:20:54 UTC (rev 221943)
@@ -439,6 +439,7 @@
         WI.ElementsTabContentView,
         WI.LayersTabContentView,
         WI.LegacyNetworkTabContentView,
+        WI.NetworkTabContentView,
         WI.NewTabContentView,
         WI.RecordingTabContentView,
         WI.ResourcesTabContentView,
@@ -1002,9 +1003,17 @@
 
 WI.showNetworkTab = function()
 {
-    var tabContentView = this.tabBrowser.bestTabContentViewForClass(WI.LegacyNetworkTabContentView);
-    if (!tabContentView)
-        tabContentView = new WI.LegacyNetworkTabContentView;
+    let tabContentView;
+    if (WI.settings.experimentalEnableNewNetworkTab.value) {
+        tabContentView = this.tabBrowser.bestTabContentViewForClass(WI.NetworkTabContentView);
+        if (!tabBrowser)
+            tabBrowser = new WI.NetworkTabContentView;
+    } else {
+        tabContentView = this.tabBrowser.bestTabContentViewForClass(WI.LegacyNetworkTabContentView);
+        if (!tabContentView)
+            tabContentView = new WI.LegacyNetworkTabContentView;
+    }
+
     this.tabBrowser.showTabForContentView(tabContentView);
 };
 
@@ -1892,7 +1901,7 @@
 {
     if (this.tabBrowser.element.isSelfOrAncestor(this.currentFocusElement) || document.activeElement === document.body) {
         var tabContentView = this.tabBrowser.selectedTabContentView;
-        if (tabContentView instanceof WI.ContentBrowserTabContentView)
+        if (tabContentView.contentBrowser)
             return tabContentView.contentBrowser;
         return null;
     }
@@ -1908,7 +1917,7 @@
 {
     if (this.tabBrowser.element.isSelfOrAncestor(this.currentFocusElement) || document.activeElement === document.body) {
         var tabContentView = this.tabBrowser.selectedTabContentView;
-        if (tabContentView instanceof WI.ContentBrowserTabContentView)
+        if (tabContentView.contentBrowser)
             return tabContentView.contentBrowser.currentContentView;
         return tabContentView;
     }
@@ -1927,7 +1936,7 @@
         return focusedContentBrowser;
 
     var tabContentView = this.tabBrowser.selectedTabContentView;
-    if (tabContentView instanceof WI.ContentBrowserTabContentView)
+    if (tabContentView.contentBrowser)
         return tabContentView.contentBrowser;
 
     return null;
@@ -1940,7 +1949,7 @@
         return focusedContentView;
 
     var tabContentView = this.tabBrowser.selectedTabContentView;
-    if (tabContentView instanceof WI.ContentBrowserTabContentView)
+    if (tabContentView.contentBrowser)
         return tabContentView.contentBrowser.currentContentView;
     return tabContentView;
 };

Modified: trunk/Source/WebInspectorUI/UserInterface/Base/Setting.js (221942 => 221943)


--- trunk/Source/WebInspectorUI/UserInterface/Base/Setting.js	2017-09-12 23:13:17 UTC (rev 221942)
+++ trunk/Source/WebInspectorUI/UserInterface/Base/Setting.js	2017-09-12 23:20:54 UTC (rev 221943)
@@ -128,4 +128,5 @@
     experimentalShowCanvasContextsInResources: new WI.Setting("experimental-show-canvas-contexts-in-resources", false),
     experimentalSpreadsheetStyleEditor: new WI.Setting("experimental-spreadsheet-style-editor", false),
     experimentalEnableLayersTab: new WI.Setting("experimental-enable-layers-tab", false),
+    experimentalEnableNewNetworkTab: new WI.Setting("experimental-enable-new-network-tab", false),
 };

Modified: trunk/Source/WebInspectorUI/UserInterface/Main.html (221942 => 221943)


--- trunk/Source/WebInspectorUI/UserInterface/Main.html	2017-09-12 23:13:17 UTC (rev 221942)
+++ trunk/Source/WebInspectorUI/UserInterface/Main.html	2017-09-12 23:20:54 UTC (rev 221943)
@@ -484,6 +484,7 @@
     <script src=""
     <script src=""
     <script src=""
+    <script src=""
     <script src=""
     <script src=""
     <script src=""
@@ -642,6 +643,7 @@
     <script src=""
     <script src=""
     <script src=""
+    <script src=""
     <script src=""
     <script src=""
     <script src=""

Modified: trunk/Source/WebInspectorUI/UserInterface/Views/LegacyNetworkTabContentView.js (221942 => 221943)


--- trunk/Source/WebInspectorUI/UserInterface/Views/LegacyNetworkTabContentView.js	2017-09-12 23:13:17 UTC (rev 221942)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/LegacyNetworkTabContentView.js	2017-09-12 23:20:54 UTC (rev 221943)
@@ -44,7 +44,7 @@
 
     static isTabAllowed()
     {
-        return !!window.NetworkAgent && !!window.PageAgent;
+        return !!window.NetworkAgent && !!window.PageAgent && !WI.settings.experimentalEnableNewNetworkTab.value;
     }
 
     // Public

Copied: trunk/Source/WebInspectorUI/UserInterface/Views/NetworkTabContentView.js (from rev 221942, trunk/Source/WebInspectorUI/UserInterface/Views/LegacyNetworkTabContentView.js) (0 => 221943)


--- trunk/Source/WebInspectorUI/UserInterface/Views/NetworkTabContentView.js	                        (rev 0)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/NetworkTabContentView.js	2017-09-12 23:20:54 UTC (rev 221943)
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2017 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+WI.NetworkTabContentView = class NetworkTabContentView extends WI.TabContentView
+{
+    constructor(identifier)
+    {
+        let {image, title} = WI.NetworkTabContentView.tabInfo();
+        let tabBarItem = new WI.GeneralTabBarItem(image, title);
+
+        super(identifier || "network", "network", tabBarItem);
+
+        this._networkTableContentView = new WI.NetworkTableContentView;
+
+        const disableBackForward = true;
+        const disableFindBanner = true;
+        this._contentBrowser = new WI.ContentBrowser(null, this, disableBackForward, disableFindBanner);
+        this._contentBrowser.showContentView(this._networkTableContentView);
+
+        this.addSubview(this._contentBrowser);
+    }
+
+    // Static
+
+    static tabInfo()
+    {
+        return {
+            image: "Images/Network.svg",
+            title: WI.UIString("Network"),
+        };
+    }
+
+    static isTabAllowed()
+    {
+        return !!window.NetworkAgent && !!window.PageAgent && WI.settings.experimentalEnableNewNetworkTab.value;
+    }
+
+    // Public
+
+    get contentBrowser() { return this._contentBrowser; }
+
+    get type()
+    {
+        return WI.NetworkTabContentView.Type;
+    }
+
+    canShowRepresentedObject(representedObject)
+    {
+        return representedObject instanceof WI.Resource;
+    }
+
+    get supportsSplitContentBrowser()
+    {
+        return true;
+    }
+};
+
+// FIXME: When removing LegacyNetworkTabContentView this should move back to just "network".
+WI.NetworkTabContentView.Type = "new-network";

Added: trunk/Source/WebInspectorUI/UserInterface/Views/NetworkTableContentView.js (0 => 221943)


--- trunk/Source/WebInspectorUI/UserInterface/Views/NetworkTableContentView.js	                        (rev 0)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/NetworkTableContentView.js	2017-09-12 23:20:54 UTC (rev 221943)
@@ -0,0 +1,121 @@
+/*
+ * Copyright (C) 2017 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+WI.NetworkTableContentView = class NetworkTableContentView extends WI.ContentView
+{
+    constructor(representedObject, extraArguments)
+    {
+        super(representedObject);
+
+        // FIXME: Network Table.
+        // FIXME: Network Timeline.
+        // FIXME: Filter text field.
+        // FIXME: Filter scope bar.
+        // FIXME: Throttling.
+        // FIXME: HAR Export.
+
+        // COMPATIBILITY (iOS 10.3): Network.setDisableResourceCaching did not exist.
+        if (window.NetworkAgent && NetworkAgent.setResourceCachingDisabled) {
+            let toolTipForDisableResourceCache = WI.UIString("Ignore the resource cache when loading resources");
+            let activatedToolTipForDisableResourceCache = WI.UIString("Use the resource cache when loading resources");
+            this._disableResourceCacheNavigationItem = new WI.ActivateButtonNavigationItem("disable-resource-cache", toolTipForDisableResourceCache, activatedToolTipForDisableResourceCache, "Images/IgnoreCaches.svg", 16, 16);
+            this._disableResourceCacheNavigationItem.activated = WI.resourceCachingDisabledSetting.value;
+
+            this._disableResourceCacheNavigationItem.addEventListener(WI.ButtonNavigationItem.Event.Clicked, this._toggleDisableResourceCache, this);
+            WI.resourceCachingDisabledSetting.addEventListener(WI.Setting.Event.Changed, this._resourceCachingDisabledSettingChanged, this);
+        }
+
+        this._clearNetworkItemsNavigationItem = new WI.ButtonNavigationItem("clear-network-items", WI.UIString("Clear Network Items (%s)").format(WI.clearKeyboardShortcut.displayName), "Images/NavigationItemClear.svg", 16, 16);
+        this._clearNetworkItemsNavigationItem.addEventListener(WI.ButtonNavigationItem.Event.Clicked, () => this.reset());
+    }
+
+    // Public
+
+    get selectionPathComponents()
+    {
+        return null;
+    }
+
+    get navigationItems()
+    {
+        let items = [];
+
+        if (this._disableResourceCacheNavigationItem)
+            items.push(this._disableResourceCacheNavigationItem);
+        items.push(this._clearNetworkItemsNavigationItem);
+
+        return items;
+    }
+
+    shown()
+    {
+        super.shown();
+
+        // FIXME: Implement.
+    }
+
+    hidden()
+    {
+        // FIXME: Implment.
+
+        super.hidden();
+    }
+
+    closed()
+    {
+        // FIXME: Implement
+
+        super.closed();
+    }
+
+    reset()
+    {
+        // FIXME: Implement
+    }
+
+    // Protected
+
+    layout()
+    {
+        // FIXME: Implement
+    }
+
+    handleClearShortcut(event)
+    {
+        this.reset();
+    }
+
+    // Private
+
+    _resourceCachingDisabledSettingChanged()
+    {
+        this._disableResourceCacheNavigationItem.activated = WI.resourceCachingDisabledSetting.value;
+    }
+
+    _toggleDisableResourceCache()
+    {
+        WI.resourceCachingDisabledSetting.value = !WI.resourceCachingDisabledSetting.value;
+    }
+};

Modified: trunk/Source/WebInspectorUI/UserInterface/Views/SettingsTabContentView.js (221942 => 221943)


--- trunk/Source/WebInspectorUI/UserInterface/Views/SettingsTabContentView.js	2017-09-12 23:13:17 UTC (rev 221942)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/SettingsTabContentView.js	2017-09-12 23:20:54 UTC (rev 221943)
@@ -234,21 +234,28 @@
 
     _createExperimentalSettingsView()
     {
+        if (!(window.CanvasAgent || window.CSSAgent || window.NetworkAgent || window.LayerTreeAgent))
+            return;
+
         let experimentalSettingsView = new WI.SettingsView("experimental", WI.UIString("Experimental"));
 
         if (window.CanvasAgent) {
             experimentalSettingsView.addSetting(WI.UIString("Canvas:"), WI.settings.experimentalShowCanvasContextsInResources, WI.UIString("Show Contexts in Resources Tab"));
+            experimentalSettingsView.addSeparator();
+        }
 
+        if (window.CSSAgent) {
+            experimentalSettingsView.addSetting(WI.UIString("Styles Panel:"), WI.settings.experimentalSpreadsheetStyleEditor, WI.UIString("Spreadsheet Style Editor"));
             experimentalSettingsView.addSeparator();
         }
 
-        experimentalSettingsView.addSetting(WI.UIString("Styles Panel:"), WI.settings.experimentalSpreadsheetStyleEditor, WI.UIString("Spreadsheet Style Editor"));
+        if (window.NetworkAgent) {
+            experimentalSettingsView.addSetting(WI.UIString("Network Tab:"), WI.settings.experimentalEnableNewNetworkTab, WI.UIString("New Network Tab"));
+            experimentalSettingsView.addSeparator();
+        }
 
-        experimentalSettingsView.addSeparator();
-
         if (window.LayerTreeAgent) {
             experimentalSettingsView.addSetting(WI.UIString("Layers:"), WI.settings.experimentalEnableLayersTab, WI.UIString("Enable Layers Tab"));
-
             experimentalSettingsView.addSeparator();
         }
 
@@ -266,14 +273,11 @@
             });
         }
 
-        if (window.CanvasAgent)
-            listenForChange(WI.settings.experimentalShowCanvasContextsInResources);
-
+        listenForChange(WI.settings.experimentalShowCanvasContextsInResources);
         listenForChange(WI.settings.experimentalSpreadsheetStyleEditor);
+        listenForChange(WI.settings.experimentalEnableNewNetworkTab);
+        listenForChange(WI.settings.experimentalEnableLayersTab);
 
-        if (window.LayerTreeAgent)
-            listenForChange(WI.settings.experimentalEnableLayersTab);
-
         this.addSettingsView(experimentalSettingsView);
     }
 

Modified: trunk/Source/WebInspectorUI/UserInterface/Views/TabBrowser.js (221942 => 221943)


--- trunk/Source/WebInspectorUI/UserInterface/Views/TabBrowser.js	2017-09-12 23:13:17 UTC (rev 221942)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/TabBrowser.js	2017-09-12 23:20:54 UTC (rev 221943)
@@ -128,6 +128,8 @@
 
             if (options.ignoreNetworkTab && tabContentView instanceof WI.LegacyNetworkTabContentView)
                 continue;
+            if (options.ignoreNetworkTab && tabContentView instanceof WI.NetworkTabContentView)
+                continue;
 
             if (tabContentView.canShowRepresentedObject(representedObject))
                 return tabContentView;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to