⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 99408 in webkit


Ignore:
Timestamp:
Nov 7, 2011, 5:22:09 AM (15 years ago)
Author:
pfeldman@chromium.org
Message:

Web Inspector: introduce UserAgent override setting.
https://bugs.webkit.org/show_bug.cgi?id=71627

Patch by Pavel Feldman <pfeldman@chromium.org> on 2011-11-07
Reviewed by Yury Semikhatsky.

  • English.lproj/localizedStrings.js:
  • inspector/InspectorResourceAgent.cpp:

(WebCore::InspectorResourceAgent::clearFrontend):
(WebCore::InspectorResourceAgent::applyUserAgentOverride):
(WebCore::InspectorResourceAgent::setUserAgentOverride):

  • inspector/front-end/HelpScreen.js:

(WebInspector.HelpScreen):
(WebInspector.HelpScreen.prototype.show):
(WebInspector.HelpScreen.prototype._onBlur):

  • inspector/front-end/NetworkManager.js:

(WebInspector.NetworkManager.prototype._cacheDisabledSettingChanged):
(WebInspector.NetworkManager.prototype._userAgentSettingChanged):

  • inspector/front-end/Settings.js:

(WebInspector.Settings):

  • inspector/front-end/SettingsScreen.js:

(WebInspector.SettingsScreen):
(WebInspector.SettingsScreen.prototype._createSelectSetting.get for):
(WebInspector.SettingsScreen.prototype._createCustomSetting):
(WebInspector.SettingsScreen.prototype._createUserActionControl.checkboxClicked):
(WebInspector.SettingsScreen.prototype._createUserAgentSelectRowElement.get const):
(WebInspector.SettingsScreen.prototype._createUserAgentSelectRowElement.textDoubleClicked):
(WebInspector.SettingsScreen.prototype._createUserAgentSelectRowElement.textChanged):

  • inspector/front-end/helpScreen.css:

(.help-table td):
(.help-content fieldset label):

Location:
trunk/Source/WebCore
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r99407 r99408  
     12011-11-07  Pavel Feldman  <pfeldman@chromium.org>
     2
     3        Web Inspector: introduce UserAgent override setting.
     4        https://bugs.webkit.org/show_bug.cgi?id=71627
     5
     6        Reviewed by Yury Semikhatsky.
     7
     8        * English.lproj/localizedStrings.js:
     9        * inspector/InspectorResourceAgent.cpp:
     10        (WebCore::InspectorResourceAgent::clearFrontend):
     11        (WebCore::InspectorResourceAgent::applyUserAgentOverride):
     12        (WebCore::InspectorResourceAgent::setUserAgentOverride):
     13        * inspector/front-end/HelpScreen.js:
     14        (WebInspector.HelpScreen):
     15        (WebInspector.HelpScreen.prototype.show):
     16        (WebInspector.HelpScreen.prototype._onBlur):
     17        * inspector/front-end/NetworkManager.js:
     18        (WebInspector.NetworkManager.prototype._cacheDisabledSettingChanged):
     19        (WebInspector.NetworkManager.prototype._userAgentSettingChanged):
     20        * inspector/front-end/Settings.js:
     21        (WebInspector.Settings):
     22        * inspector/front-end/SettingsScreen.js:
     23        (WebInspector.SettingsScreen):
     24        (WebInspector.SettingsScreen.prototype._createSelectSetting.get for):
     25        (WebInspector.SettingsScreen.prototype._createCustomSetting):
     26        (WebInspector.SettingsScreen.prototype._createUserActionControl.checkboxClicked):
     27        (WebInspector.SettingsScreen.prototype._createUserAgentSelectRowElement.get const):
     28        (WebInspector.SettingsScreen.prototype._createUserAgentSelectRowElement.textDoubleClicked):
     29        (WebInspector.SettingsScreen.prototype._createUserAgentSelectRowElement.textChanged):
     30        * inspector/front-end/helpScreen.css:
     31        (.help-table td):
     32        (.help-content fieldset label):
     33
    1342011-11-07  Alexander Pavlov  <apavlov@chromium.org>
    235
  • trunk/Source/WebCore/inspector/InspectorResourceAgent.cpp

    r96227 r99408  
    7474static const char extraRequestHeaders[] = "extraRequestHeaders";
    7575static const char cacheDisabled[] = "cacheDisabled";
     76static const char userAgentOverride[] = "userAgentOverride";
    7677}
    7778
     
    8687    ErrorString error;
    8788    disable(&error);
    88     m_userAgentOverride = "";
    8989}
    9090
     
    349349void InspectorResourceAgent::applyUserAgentOverride(String* userAgent)
    350350{
    351     if (!m_userAgentOverride.isEmpty())
    352         *userAgent = m_userAgentOverride;
     351    String userAgentOverride = m_state->getString(ResourceAgentState::userAgentOverride);
     352    if (!userAgentOverride.isEmpty())
     353        *userAgent = userAgentOverride;
    353354}
    354355
     
    470471void InspectorResourceAgent::setUserAgentOverride(ErrorString*, const String& userAgent)
    471472{
    472     m_userAgentOverride = userAgent;
     473    m_state->setString(ResourceAgentState::userAgentOverride, userAgent);
    473474}
    474475
  • trunk/Source/WebCore/inspector/front-end/HelpScreen.js

    r98855 r99408  
    3737    this._element.className = "help-window-outer";
    3838    this._element.addEventListener("keydown", this._onKeyDown.bind(this), false);
     39    this._element.tabIndex = 0;
     40    this._element.addEventListener("focus", this._onBlur.bind(this), false);
    3941
    4042    var mainWindow = this._element.createChild("div", "help-window-main");
     
    4244    var closeButton = captionWindow.createChild("button", "help-close-button");
    4345    this.contentElement = mainWindow.createChild("div", "help-content");
    44     this.contentElement.tabIndex = 0;
    45     this.contentElement.addEventListener("blur", this._onBlur.bind(this), false);
    4646    captionWindow.createChild("h1", "help-window-title").textContent = title;
    4747
     
    6565        this._onHide = onHide;
    6666        this._previousFocusElement = WebInspector.currentFocusElement();
    67         WebInspector.setCurrentFocusElement(this.contentElement);
     67        WebInspector.setCurrentFocusElement(this._element);
    6868    },
    6969
     
    9090    },
    9191
    92     _onBlur: function()
     92    _onBlur: function(event)
    9393    {
    94          // Pretend we're modal, grab focus back if we're still shown.
    95         if (this._isShown)
    96             WebInspector.setCurrentFocusElement(this.contentElement);
     94        // Pretend we're modal, grab focus back if we're still shown.
     95        if (this._isShown && event.target !== this._element && !this._element.isAncestor(event.target))
     96            WebInspector.setCurrentFocusElement(this._element);
    9797    }
    9898}
  • trunk/Source/WebCore/inspector/front-end/NetworkManager.js

    r98456 r99408  
    4141    NetworkAgent.enable();
    4242
    43     WebInspector.settings.cacheDisabled.addChangeListener(this._cacheDisabledSettingChanged.bind(this));
     43    WebInspector.settings.cacheDisabled.addChangeListener(this._cacheDisabledSettingChanged, this);
     44
     45    if (WebInspector.settings.userAgent.get())
     46        this._userAgentSettingChanged();
     47    WebInspector.settings.userAgent.addChangeListener(this._userAgentSettingChanged, this);
    4448}
    4549
     
    7680    {
    7781        NetworkAgent.setCacheDisabled(event.data);
     82    },
     83
     84    _userAgentSettingChanged: function()
     85    {
     86        NetworkAgent.setUserAgentOverride(WebInspector.settings.userAgent.get());
    7887    }
    7988}
  • trunk/Source/WebCore/inspector/front-end/Settings.js

    r98855 r99408  
    9191    this.workerInspectionEnabled = this.createSetting("workerInspectionEnabled", []);
    9292    this.cacheDisabled = this.createSetting("cacheDisabled", false);
     93    this.overrideUserAgent = this.createSetting("overrideUserAgent", "");
     94    this.userAgent = this.createSetting("userAgent", "");
    9395    this.showScriptFolders = this.createSetting("showScriptFolders", true);
    9496
  • trunk/Source/WebCore/inspector/front-end/SettingsScreen.js

    r98545 r99408  
    5353    p = this._appendSection(WebInspector.UIString("Text editor"));
    5454    p.appendChild(this._createSelectSetting(WebInspector.UIString("Indent"), [
    55         [ WebInspector.TextEditorModel.Indent.TwoSpaces, WebInspector.UIString("2 spaces") ],
    56         [ WebInspector.TextEditorModel.Indent.FourSpaces, WebInspector.UIString("4 spaces") ],
    57         [ WebInspector.TextEditorModel.Indent.EightSpaces, WebInspector.UIString("8 spaces") ],
    58         [ WebInspector.TextEditorModel.Indent.TabCharacter, WebInspector.UIString("Tab character") ] ], WebInspector.settings.textEditorIndent));
    59 
    60     if (Preferences.canDisableCache) {
    61         p = this._appendSection(WebInspector.UIString("Network"), true);
     55            [ WebInspector.UIString("2 spaces"), WebInspector.TextEditorModel.Indent.TwoSpaces ],
     56            [ WebInspector.UIString("4 spaces"), WebInspector.TextEditorModel.Indent.FourSpaces ],
     57            [ WebInspector.UIString("8 spaces"), WebInspector.TextEditorModel.Indent.EightSpaces ],
     58            [ WebInspector.UIString("Tab character"), WebInspector.TextEditorModel.Indent.TabCharacter ]
     59        ], WebInspector.settings.textEditorIndent));
     60
     61    p = this._appendSection(WebInspector.UIString("Network"), true);
     62    if (Preferences.canDisableCache)
    6263        p.appendChild(this._createCheckboxSetting(WebInspector.UIString("Disable cache"), WebInspector.settings.cacheDisabled));
    63     }
     64    p.appendChild(this._createUserActionControl());
    6465
    6566    p = this._appendSection(WebInspector.UIString("Scripts"), true);
     
    130131    {
    131132        var fieldsetElement = document.createElement("fieldset");
    132         fieldsetElement.textContent = name;
     133        fieldsetElement.createChild("label").textContent = name;
    133134
    134135        var select = document.createElement("select");
     
    137138        for (var i = 0; i < options.length; ++i) {
    138139            var option = options[i];
    139             select.add(new Option(option[1], option[0]));
    140             if (settingValue === option[0])
     140            select.add(new Option(option[0], option[1]));
     141            if (settingValue === option[1])
    141142                select.selectedIndex = i;
    142 
    143143        }
    144144
     
    197197        var p = document.createElement("p");
    198198        var fieldsetElement = document.createElement("fieldset");
    199         fieldsetElement.textContent = name;
     199        fieldsetElement.createChild("label").textContent = name;
    200200        fieldsetElement.appendChild(element);
    201201        p.appendChild(fieldsetElement);
    202202        return p;
     203    },
     204
     205    _createUserActionControl: function()
     206    {
     207        var userAgent = WebInspector.settings.userAgent.get();
     208
     209        var p = document.createElement("p");
     210        var labelElement = p.createChild("label");
     211        var checkboxElement = labelElement.createChild("input");
     212        checkboxElement.type = "checkbox";
     213        checkboxElement.checked = !!userAgent;
     214        checkboxElement.addEventListener("click", checkboxClicked.bind(this), false);
     215        labelElement.appendChild(document.createTextNode("Override User Agent"));
     216
     217        var selectSectionElement;
     218        function checkboxClicked()
     219        {
     220            if (checkboxElement.checked) {
     221                selectSectionElement = this._createUserAgentSelectRowElement();
     222                p.appendChild(selectSectionElement);
     223            } else {
     224                if (selectSectionElement) {
     225                    p.removeChild(selectSectionElement);
     226                    selectSectionElement = null;
     227                }
     228                WebInspector.settings.userAgent.set("");
     229            }
     230        }
     231
     232        checkboxClicked.call(this);
     233        return p;
     234    },
     235
     236    _createUserAgentSelectRowElement: function()
     237    {
     238        var userAgent = WebInspector.settings.userAgent.get();
     239        const userAgents = [
     240            ["Internet Explorer 9", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0"],
     241            ["Internet Explorer 8", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0"],
     242            ["Internet Explorer 7", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0"],
     243
     244            ["Firefox 7 \u2014 Windows", "Mozilla/5.0 (Windows NT 6.1; Intel Mac OS X 10.6; rv:7.0.1) Gecko/20100101 Firefox/7.0.1"],
     245            ["Firefox 7 \u2014 Mac", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:7.0.1) Gecko/20100101 Firefox/7.0.1"],
     246            ["Firefox 4 \u2014 Windows", "Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1"],
     247            ["Firefox 4 \u2014 Mac", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1"],
     248
     249            ["iPhone \u2014 iOS 5", "Mozilla/5.0 (iPhone; CPU iPhone OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3"],
     250            ["iPhone \u2014 iOS 4", "Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_2 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8H7 Safari/6533.18.5"],
     251            ["iPad \u2014 iOS 5", "Mozilla/5.0 (iPad; CPU OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3"],
     252            ["iPad \u2014 iOS 4", "Mozilla/5.0 (iPad; CPU OS 4_3_2 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8H7 Safari/6533.18.5"],
     253
     254            ["Android 2.3 \u2014 Nexus S", "Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; Nexus S Build/GRK39F) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1"],
     255            [WebInspector.UIString("Other..."), "Other"]
     256        ];
     257
     258        var fieldsetElement = document.createElement("fieldset");
     259        var selectElement = fieldsetElement.createChild("select");
     260        var otherUserAgentElement = fieldsetElement.createChild("input");
     261        otherUserAgentElement.value = userAgent;
     262        otherUserAgentElement.title = userAgent;
     263
     264        var selectionRestored = false;
     265        for (var i = 0; i < userAgents.length; ++i) {
     266            var agent = userAgents[i];
     267            selectElement.add(new Option(agent[0], agent[1]));
     268            if (userAgent === agent[1]) {
     269                selectElement.selectedIndex = i;
     270                selectionRestored = true;
     271            }
     272        }
     273
     274        if (!selectionRestored) {
     275            if (!userAgent)
     276                selectElement.selectedIndex = 0;
     277            else
     278                selectElement.selectedIndex = userAgents.length - 1;
     279        }
     280
     281        selectElement.addEventListener("change", selectionChanged.bind(this), false);
     282
     283        function selectionChanged()
     284        {
     285            var value = selectElement.options[selectElement.selectedIndex].value;
     286            if (value !== "Other") {
     287                WebInspector.settings.userAgent.set(value);
     288                otherUserAgentElement.value = value;
     289                otherUserAgentElement.title = value;
     290                otherUserAgentElement.disabled = true;
     291            } else {
     292                otherUserAgentElement.disabled = false;
     293                otherUserAgentElement.focus();
     294            }
     295        }
     296
     297        fieldsetElement.addEventListener("dblclick", textDoubleClicked.bind(this), false);
     298        otherUserAgentElement.addEventListener("blur", textChanged.bind(this), false);
     299
     300        function textDoubleClicked()
     301        {
     302            selectElement.selectedIndex = userAgents.length - 1;
     303            selectionChanged.call(this);
     304        }
     305
     306        function textChanged()
     307        {
     308            WebInspector.settings.userAgent.set(otherUserAgentElement.value);
     309        }
     310
     311        selectionChanged.call(this);
     312        return fieldsetElement;
    203313    }
    204 };
     314}
    205315
    206316WebInspector.SettingsScreen.prototype.__proto__ = WebInspector.HelpScreen.prototype;
  • trunk/Source/WebCore/inspector/front-end/helpScreen.css

    r95942 r99408  
    131131    white-space: nowrap;
    132132    vertical-align: top;
     133    width: 50%;
    133134}
    134135
     
    173174    margin: 0 0 0 6px;
    174175    padding-left: 3px;
     176}
     177
     178
     179.help-content fieldset label {
     180    padding-right: 4px;
    175181}
    176182
     
    191197
    192198.help-content select {
    193     margin-left: 1em;
    194199    background-color: rgb(64, 64, 64);
    195200    color: white;
Note: See TracChangeset for help on using the changeset viewer.