Changeset 86959 in webkit


Ignore:
Timestamp:
May 20, 2011 9:15:08 AM (13 years ago)
Author:
yurys@chromium.org
Message:

2011-05-19 Sergey Vorobyev <sergeyvorobyev@google.com>

Reviewed by Yury Semikhatsky.

Web Inspector: Background network events collection - add GUI to Inspector.
https://bugs.webkit.org/show_bug.cgi?id=58652

Move reopenFrontend() to inspector-test.js
Add first test for background events collection.

  • http/tests/inspector/inspector-test.js: ():
  • http/tests/inspector/network-test.js: Added. (initialize_NetworkTest.InspectorTest.enableBackgroundEventCollection): (initialize_NetworkTest.InspectorTest.disableBackgroundEventCollection):
  • http/tests/inspector/network/network-clear-after-disabled-expected.txt: Added.
  • http/tests/inspector/network/network-clear-after-disabled.html: Added.
  • http/tests/inspector/network/network-close-load-open-expected.txt: Added.
  • http/tests/inspector/network/network-close-load-open.html: Added.
  • http/tests/inspector/network/network-open-load-reopen-expected.txt: Added.
  • http/tests/inspector/network/network-open-load-reopen.html: Added.
  • inspector/debugger/open-close-open-expected.txt:
  • inspector/debugger/open-close-open.html:
  • platform/qt/Skipped:

2011-05-19 Sergey Vorobyev <sergeyvorobyev@google.com>

Reviewed by Yury Semikhatsky.

Web Inspector: Background network events collection - add GUI to Inspector.
https://bugs.webkit.org/show_bug.cgi?id=58652

Now in WebInspector Network panel avalaible new checkbox item in context menu:
"Background events collection". It allows to save all network events when inspector
frontend closed. Events that occur before collection enabling are not preserved after
frontend reopening. Property unique for each page. Disabled by default.

Tests: http/tests/inspector/network/network-clear-after-disabled.html

http/tests/inspector/network/network-close-load-open.html
http/tests/inspector/network/network-open-load-reopen.html

  • inspector/EventsCollector.cpp: (WebCore::EventsCollector::clear):
  • inspector/EventsCollector.h:
  • inspector/Inspector.json:
  • inspector/InspectorFrontendProxy.cpp: (WebCore::InspectorFrontendProxy::inspectorFrontendChannel):
  • inspector/InspectorFrontendProxy.h:
  • inspector/InspectorResourceAgent.cpp: (WebCore::InspectorResourceAgent::setFrontend): (WebCore::InspectorResourceAgent::clearFrontend): (WebCore::InspectorResourceAgent::isBackgroundEventsCollectionEnabled): (WebCore::InspectorResourceAgent::setBackgroundEventsCollectionEnabled): (WebCore::InspectorResourceAgent::initializeBackgroundCollection): (WebCore::InspectorResourceAgent::InspectorResourceAgent):
  • inspector/InspectorResourceAgent.h:
  • inspector/front-end/NetworkPanel.js: (WebInspector.NetworkPanel): (WebInspector.NetworkPanel.prototype._contextMenu): (WebInspector.NetworkPanel.prototype._toggleBackgroundEventsCollection):
Location:
trunk
Files:
7 added
14 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r86954 r86959  
     12011-05-19  Sergey Vorobyev  <sergeyvorobyev@google.com>
     2
     3        Reviewed by Yury Semikhatsky.
     4
     5        Web Inspector: Background network events collection - add GUI to Inspector.
     6        https://bugs.webkit.org/show_bug.cgi?id=58652
     7
     8        Move reopenFrontend() to inspector-test.js
     9        Add first test for background events collection.
     10
     11        * http/tests/inspector/inspector-test.js:
     12        ():
     13        * http/tests/inspector/network-test.js: Added.
     14        (initialize_NetworkTest.InspectorTest.enableBackgroundEventCollection):
     15        (initialize_NetworkTest.InspectorTest.disableBackgroundEventCollection):
     16        * http/tests/inspector/network/network-clear-after-disabled-expected.txt: Added.
     17        * http/tests/inspector/network/network-clear-after-disabled.html: Added.
     18        * http/tests/inspector/network/network-close-load-open-expected.txt: Added.
     19        * http/tests/inspector/network/network-close-load-open.html: Added.
     20        * http/tests/inspector/network/network-open-load-reopen-expected.txt: Added.
     21        * http/tests/inspector/network/network-open-load-reopen.html: Added.
     22        * inspector/debugger/open-close-open-expected.txt:
     23        * inspector/debugger/open-close-open.html:
     24        * platform/qt/Skipped:
     25
    1262011-05-20  Csaba Osztrogonác  <ossy@webkit.org>
    227
  • trunk/LayoutTests/http/tests/inspector/inspector-test.js

    r86672 r86959  
    325325var runTestCallId = 0;
    326326var completeTestCallId = 1;
     327var frontendReopeningCount = 0;
     328
     329function reopenFrontend()
     330{
     331    closeFrontend(openFrontendAndIncrement);
     332}
     333
     334function closeFrontend(callback)
     335{
     336    // Do this asynchronously to allow InspectorBackendDispatcher to send response
     337    // back to the frontend before it's destroyed.
     338    setTimeout(function() {
     339        layoutTestController.closeWebInspector();
     340        callback();
     341    }, 0);
     342}
     343
     344function openFrontendAndIncrement()
     345{
     346    frontendReopeningCount++;
     347    layoutTestController.showWebInspector();
     348    runTest();
     349}
    327350
    328351function runAfterIframeIsLoaded()
  • trunk/LayoutTests/inspector/debugger/open-close-open-expected.txt

    r82435 r86959  
    1111<script>
    1212
    13 function reopenFrontend() {
    14     // Do this asynchronously to allow InspectorBackendDispatcher to send response
    15     // back to the frontend before it's destroyed.
    16     setTimeout(function() {
    17         window._frontendReopened = true;
    18         layoutTestController.closeWebInspector();
    19         layoutTestController.showWebInspector();
    20         runTest();
    21     }, 0);
    22 }
    23 
    2413function test()
    2514{
    26     InspectorTest.evaluateInPage("window._frontendReopened", function(result) {
    27         if (result._description === "undefined")
     15    InspectorTest.evaluateInPage("frontendReopeningCount", function(result) {
     16        if (result._description === "0")
    2817            InspectorTest.evaluateInPage("reopenFrontend()")
    2918        else {
  • trunk/LayoutTests/inspector/debugger/open-close-open.html

    r82435 r86959  
    55<script>
    66
    7 function reopenFrontend() {
    8     // Do this asynchronously to allow InspectorBackendDispatcher to send response
    9     // back to the frontend before it's destroyed.
    10     setTimeout(function() {
    11         window._frontendReopened = true;
    12         layoutTestController.closeWebInspector();
    13         layoutTestController.showWebInspector();
    14         runTest();
    15     }, 0);
    16 }
    17 
    187function test()
    198{
    20     InspectorTest.evaluateInPage("window._frontendReopened", function(result) {
    21         if (result._description === "undefined")
     9    InspectorTest.evaluateInPage("frontendReopeningCount", function(result) {
     10        if (result._description === "0")
    2211            InspectorTest.evaluateInPage("reopenFrontend()")
    2312        else {
  • trunk/LayoutTests/platform/qt/Skipped

    r86938 r86959  
    450450http/tests/inspector/change-iframe-src.html
    451451inspector/debugger/open-close-open.html
     452
     453# [Qt] This tests' fails probably has same reason as test inspector/debugger/open-close-open.html.
     454http/tests/inspector/network/network-open-load-reopen.html
     455http/tests/inspector/network/network-close-load-open.html
     456http/tests/inspector/network/network-clear-after-disabled.html
    452457
    453458# [Qt] fast/frames/flattening/frameset-flattening-subframesets.html fails intermittently on Qt bot
  • trunk/Source/WebCore/ChangeLog

    r86958 r86959  
     12011-05-19  Sergey Vorobyev  <sergeyvorobyev@google.com>
     2
     3        Reviewed by Yury Semikhatsky.
     4
     5        Web Inspector: Background network events collection - add GUI to Inspector.
     6        https://bugs.webkit.org/show_bug.cgi?id=58652
     7
     8        Now in WebInspector Network panel avalaible new checkbox item in context menu:
     9        "Background events collection". It allows to save all network events when inspector
     10        frontend closed. Events that occur before collection enabling are not preserved after
     11        frontend reopening. Property unique for each page. Disabled by default.
     12
     13
     14        Tests: http/tests/inspector/network/network-clear-after-disabled.html
     15               http/tests/inspector/network/network-close-load-open.html
     16               http/tests/inspector/network/network-open-load-reopen.html
     17
     18        * inspector/EventsCollector.cpp:
     19        (WebCore::EventsCollector::clear):
     20        * inspector/EventsCollector.h:
     21        * inspector/Inspector.json:
     22        * inspector/InspectorFrontendProxy.cpp:
     23        (WebCore::InspectorFrontendProxy::inspectorFrontendChannel):
     24        * inspector/InspectorFrontendProxy.h:
     25        * inspector/InspectorResourceAgent.cpp:
     26        (WebCore::InspectorResourceAgent::setFrontend):
     27        (WebCore::InspectorResourceAgent::clearFrontend):
     28        (WebCore::InspectorResourceAgent::isBackgroundEventsCollectionEnabled):
     29        (WebCore::InspectorResourceAgent::setBackgroundEventsCollectionEnabled):
     30        (WebCore::InspectorResourceAgent::initializeBackgroundCollection):
     31        (WebCore::InspectorResourceAgent::InspectorResourceAgent):
     32        * inspector/InspectorResourceAgent.h:
     33        * inspector/front-end/NetworkPanel.js:
     34        (WebInspector.NetworkPanel):
     35        (WebInspector.NetworkPanel.prototype._contextMenu):
     36        (WebInspector.NetworkPanel.prototype._toggleBackgroundEventsCollection):
     37
    1382011-05-20  Pavel Podivilov  <podivilov@chromium.org>
    239
  • trunk/Source/WebCore/inspector/EventsCollector.cpp

    r83975 r86959  
    4949}
    5050
     51void EventsCollector::clear()
     52{
     53    m_events.clear();
     54}
     55
    5156void EventsCollector::sendCollectedEvents(InspectorFrontendChannel* receiver)
    5257{
  • trunk/Source/WebCore/inspector/EventsCollector.h

    r83975 r86959  
    4141    ~EventsCollector() { }
    4242    void addEvent(const String& message);
     43    void clear();
    4344    void sendCollectedEvents(InspectorFrontendChannel*);
    4445private:
  • trunk/Source/WebCore/inspector/Inspector.json

    r86836 r86959  
    472472                "parameters": [
    473473                    { "name": "headers", "type": "object", "description": "Map with extra HTTP headers." }
     474                ]
     475            },
     476            {
     477                "name": "setBackgroundEventsCollectionEnabled",
     478                "description": "Toggles background network event collection.",
     479                "parameters": [
     480                    { "name": "enabled", "type": "boolean", "description": "true - enable collection, false - disable" }
     481                ]
     482            },
     483            {
     484                "name": "isBackgroundEventsCollectionEnabled",
     485                "returns": [
     486                    { "name": "enabled", "type": "boolean" }
    474487                ]
    475488            }
  • trunk/Source/WebCore/inspector/InspectorFrontendProxy.cpp

    r83975 r86959  
    5656}
    5757
     58InspectorFrontendChannel* InspectorFrontendProxy::inspectorFrontendChannel()
     59{
     60    return m_receiver;
     61}
     62
    5863void InspectorFrontendProxy::setEventsCollector(EventsCollector* collector)
    5964{
  • trunk/Source/WebCore/inspector/InspectorFrontendProxy.h

    r83975 r86959  
    4343
    4444    void setInspectorFrontendChannel(InspectorFrontendChannel*);
     45    InspectorFrontendChannel* inspectorFrontendChannel();
    4546    void setEventsCollector(EventsCollector*);
    4647    virtual bool sendMessageToFrontend(const String& message);
  • trunk/Source/WebCore/inspector/InspectorResourceAgent.cpp

    r86752 r86959  
    6969static const char resourceAgentEnabled[] = "resourceAgentEnabled";
    7070static const char extraRequestHeaders[] = "extraRequestHeaders";
     71static const char backgroundEventsCollectionEnabled[] = "backgroundEventsCollectionEnabled";
    7172}
    7273
     
    7475{
    7576    m_frontend = frontend->network();
    76     if (backgroundEventsCollectionEnabled()) {
     77    if (isBackgroundEventsCollectionEnabled()) {
    7778        // Insert Message Proxy in receiver chain.
    7879        InspectorFrontendChannel* client = m_frontend->getInspectorFrontendChannel();
     
    8586void InspectorResourceAgent::clearFrontend()
    8687{
    87     if (backgroundEventsCollectionEnabled()) {
     88    if (isBackgroundEventsCollectionEnabled()) {
     89        m_frontend = m_mockFrontend.get();
    8890        m_inspectorFrontendProxy->setInspectorFrontendChannel(0);
    89         m_frontend = m_mockFrontend.get();
    90     } else
     91        m_frontend->setInspectorFrontendChannel(m_inspectorFrontendProxy.get());
     92    } else {
    9193        m_frontend = 0;
    92 
     94        ErrorString error;
     95        disable(&error);
     96    }
    9397    m_userAgentOverride = "";
    94     disable(0);
    9598}
    9699
     
    332335#endif // ENABLE(WEB_SOCKETS)
    333336
    334 bool InspectorResourceAgent::backgroundEventsCollectionEnabled()
    335 {
    336     // FIXME (https://bugs.webkit.org/show_bug.cgi?id=58652)
    337     // Add here condition to enable background events collection.
    338     // Now this function is disable.
    339     return false;
     337void InspectorResourceAgent::isBackgroundEventsCollectionEnabled(ErrorString*, bool* enabled)
     338{
     339    (*enabled) = isBackgroundEventsCollectionEnabled();
     340}
     341
     342bool InspectorResourceAgent::isBackgroundEventsCollectionEnabled()
     343{
     344    return m_state->getBoolean(ResourceAgentState::backgroundEventsCollectionEnabled);
     345}
     346
     347void InspectorResourceAgent::setBackgroundEventsCollectionEnabled(ErrorString*, bool enabled)
     348{
     349    if (enabled == isBackgroundEventsCollectionEnabled())
     350        return;
     351    if (enabled) {
     352        if (!m_eventsCollector)
     353            initializeBackgroundCollection();
     354        // Insert Message Proxy in receiver chain.
     355        ASSERT(m_frontend);
     356        InspectorFrontendChannel* client = m_frontend->getInspectorFrontendChannel();
     357        m_inspectorFrontendProxy->setInspectorFrontendChannel(client);
     358        m_frontend->setInspectorFrontendChannel(m_inspectorFrontendProxy.get());
     359    } else {
     360        // Take out Message Proxy from receiver chain.
     361        m_frontend->setInspectorFrontendChannel(m_inspectorFrontendProxy->inspectorFrontendChannel());
     362        m_inspectorFrontendProxy->setInspectorFrontendChannel(0);
     363        m_eventsCollector->clear();
     364    }
     365    return m_state->setBoolean(ResourceAgentState::backgroundEventsCollectionEnabled, enabled);
    340366}
    341367
     
    369395}
    370396
     397void InspectorResourceAgent::initializeBackgroundCollection()
     398{
     399    m_eventsCollector = adoptPtr(new EventsCollector());
     400    m_inspectorFrontendProxy = adoptPtr(new InspectorFrontendProxy(m_eventsCollector.get()));
     401    // Create mock frontend, so we can collect network events.
     402    m_mockFrontend = adoptPtr(new InspectorFrontend::Network(m_inspectorFrontendProxy.get()));
     403}
     404
    371405InspectorResourceAgent::InspectorResourceAgent(InstrumentingAgents* instrumentingAgents, InspectorPageAgent* pageAgent, InspectorState* state)
    372406    : m_instrumentingAgents(instrumentingAgents)
     
    374408    , m_state(state)
    375409{
    376     if (backgroundEventsCollectionEnabled()) {
    377         m_eventsCollector = adoptPtr(new EventsCollector);
    378         m_inspectorFrontendProxy = adoptPtr(new InspectorFrontendProxy(m_eventsCollector.get()));
     410    if (isBackgroundEventsCollectionEnabled()) {
     411        initializeBackgroundCollection();
    379412        // Create mock frontend, so we can collect network events.
    380         m_mockFrontend = adoptPtr(new InspectorFrontend::Network(m_inspectorFrontendProxy.get()));
    381413        m_frontend = m_mockFrontend.get();
    382414        enable();
  • trunk/Source/WebCore/inspector/InspectorResourceAgent.h

    r84774 r86959  
    106106#endif
    107107
    108     bool backgroundEventsCollectionEnabled();
     108    void isBackgroundEventsCollectionEnabled(ErrorString*, bool* enabled);
     109    void setBackgroundEventsCollectionEnabled(ErrorString*, bool enabled);
    109110
    110     // Called from frontend 
     111    // Called from frontend
    111112    void enable(ErrorString*);
    112113    void disable(ErrorString*);
     
    118119    InspectorResourceAgent(InstrumentingAgents*, InspectorPageAgent*, InspectorState*);
    119120
     121    bool isBackgroundEventsCollectionEnabled();
    120122    void enable();
     123    void initializeBackgroundCollection();
    121124
    122125    InstrumentingAgents* m_instrumentingAgents;
    123126    InspectorPageAgent* m_pageAgent;
    124127    InspectorState* m_state;
     128    InspectorFrontend::Network* m_frontend;
    125129    OwnPtr<EventsCollector> m_eventsCollector;
    126     InspectorFrontend::Network* m_frontend;
     130    OwnPtr<InspectorFrontendProxy> m_inspectorFrontendProxy;
    127131    OwnPtr<InspectorFrontend::Network> m_mockFrontend;
    128     OwnPtr<InspectorFrontendProxy> m_inspectorFrontendProxy;
    129132    String m_userAgentOverride;
    130133};
  • trunk/Source/WebCore/inspector/front-end/NetworkPanel.js

    r86855 r86959  
    3131WebInspector.NetworkPanel = function()
    3232{
     33    function eventsCollectionEnabled(error, enabled)
     34    {
     35        this._backgroundCollectionEnabled = enabled;
     36    }
     37    NetworkAgent.isBackgroundEventsCollectionEnabled(eventsCollectionEnabled.bind(this));
     38
    3339    WebInspector.Panel.call(this, "network");
    3440
     
    10211027        }
    10221028
     1029        contextMenu.appendSeparator();
     1030        contextMenu.appendCheckboxItem(WebInspector.UIString("Enabled background events collection"), this._toggleBackgroundEventsCollection.bind(this), this._backgroundCollectionEnabled);
     1031
    10231032        contextMenu.show(event);
    10241033    },
     
    10651074        var har = (new WebInspector.HAREntry(resource)).build();
    10661075        InspectorFrontendHost.saveAs(resource.displayName + ".har", JSON.stringify(har));
     1076    },
     1077
     1078    _toggleBackgroundEventsCollection: function(resource)
     1079    {
     1080        this._backgroundCollectionEnabled = !this._backgroundCollectionEnabled;
     1081        NetworkAgent.setBackgroundEventsCollectionEnabled(this._backgroundCollectionEnabled);
    10671082    },
    10681083
Note: See TracChangeset for help on using the changeset viewer.