Changeset 80239 in webkit


Ignore:
Timestamp:
Mar 3, 2011 7:52:10 AM (13 years ago)
Author:
yurys@chromium.org
Message:

2011-03-03 Yury Semikhatsky <yurys@chromium.org>

Reviewed by Pavel Feldman.

Web Inspector: Resource agent should have same lifetime as Inspector agent
https://bugs.webkit.org/show_bug.cgi?id=55461

  • inspector/Inspector.idl:
  • inspector/InspectorAgent.cpp: (WebCore::InspectorAgent::InspectorAgent): (WebCore::InspectorAgent::inspectedPageDestroyed): disconnectFrontend is called before the agent is destroyed to clear frontend reference in all agents. (WebCore::InspectorAgent::restoreInspectorStateFromCookie): (WebCore::InspectorAgent::setFrontend): (WebCore::InspectorAgent::disconnectFrontend): (WebCore::InspectorAgent::releaseFrontendLifetimeAgents): (WebCore::InspectorAgent::didCommitLoad):
  • inspector/InspectorAgent.h: (WebCore::InspectorAgent::resourceAgent):
  • inspector/InspectorBrowserDebuggerAgent.cpp: (WebCore::InspectorBrowserDebuggerAgent::~InspectorBrowserDebuggerAgent):
  • inspector/InspectorDebuggerAgent.cpp: (WebCore::InspectorDebuggerAgent::~InspectorDebuggerAgent):
  • inspector/InspectorInstrumentation.cpp: (WebCore::InspectorInstrumentation::didCreateWebSocketImpl): (WebCore::InspectorInstrumentation::willSendWebSocketHandshakeRequestImpl): (WebCore::InspectorInstrumentation::didReceiveWebSocketHandshakeResponseImpl): (WebCore::InspectorInstrumentation::didCloseWebSocketImpl): (WebCore::InspectorInstrumentation::retrieveResourceAgent):
  • inspector/InspectorResourceAgent.cpp: (WebCore::InspectorResourceAgent::setFrontend): (WebCore::InspectorResourceAgent::clearFrontend): (WebCore::InspectorResourceAgent::restore): (WebCore::InspectorResourceAgent::~InspectorResourceAgent): (WebCore::InspectorResourceAgent::enable): (WebCore::InspectorResourceAgent::disable): (WebCore::InspectorResourceAgent::InspectorResourceAgent):
  • inspector/InspectorResourceAgent.h: (WebCore::InspectorResourceAgent::create):
  • inspector/InspectorTimelineAgent.cpp: (WebCore::InspectorTimelineAgent::restore):
  • inspector/InspectorTimelineAgent.h:
  • inspector/front-end/NetworkManager.js: (WebInspector.NetworkManager): (WebInspector.NetworkManager.prototype.frontendReused):
  • inspector/front-end/inspector.js: (WebInspector.frontendReused):
Location:
trunk/Source/WebCore
Files:
13 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r80235 r80239  
     12011-03-03  Yury Semikhatsky  <yurys@chromium.org>
     2
     3        Reviewed by Pavel Feldman.
     4
     5        Web Inspector: Resource agent should have same lifetime as Inspector agent
     6        https://bugs.webkit.org/show_bug.cgi?id=55461
     7
     8        * inspector/Inspector.idl:
     9        * inspector/InspectorAgent.cpp:
     10        (WebCore::InspectorAgent::InspectorAgent):
     11        (WebCore::InspectorAgent::inspectedPageDestroyed): disconnectFrontend is called before the agent is destroyed
     12        to clear frontend reference in all agents.
     13        (WebCore::InspectorAgent::restoreInspectorStateFromCookie):
     14        (WebCore::InspectorAgent::setFrontend):
     15        (WebCore::InspectorAgent::disconnectFrontend):
     16        (WebCore::InspectorAgent::releaseFrontendLifetimeAgents):
     17        (WebCore::InspectorAgent::didCommitLoad):
     18        * inspector/InspectorAgent.h:
     19        (WebCore::InspectorAgent::resourceAgent):
     20        * inspector/InspectorBrowserDebuggerAgent.cpp:
     21        (WebCore::InspectorBrowserDebuggerAgent::~InspectorBrowserDebuggerAgent):
     22        * inspector/InspectorDebuggerAgent.cpp:
     23        (WebCore::InspectorDebuggerAgent::~InspectorDebuggerAgent):
     24        * inspector/InspectorInstrumentation.cpp:
     25        (WebCore::InspectorInstrumentation::didCreateWebSocketImpl):
     26        (WebCore::InspectorInstrumentation::willSendWebSocketHandshakeRequestImpl):
     27        (WebCore::InspectorInstrumentation::didReceiveWebSocketHandshakeResponseImpl):
     28        (WebCore::InspectorInstrumentation::didCloseWebSocketImpl):
     29        (WebCore::InspectorInstrumentation::retrieveResourceAgent):
     30        * inspector/InspectorResourceAgent.cpp:
     31        (WebCore::InspectorResourceAgent::setFrontend):
     32        (WebCore::InspectorResourceAgent::clearFrontend):
     33        (WebCore::InspectorResourceAgent::restore):
     34        (WebCore::InspectorResourceAgent::~InspectorResourceAgent):
     35        (WebCore::InspectorResourceAgent::enable):
     36        (WebCore::InspectorResourceAgent::disable):
     37        (WebCore::InspectorResourceAgent::InspectorResourceAgent):
     38        * inspector/InspectorResourceAgent.h:
     39        (WebCore::InspectorResourceAgent::create):
     40        * inspector/InspectorTimelineAgent.cpp:
     41        (WebCore::InspectorTimelineAgent::restore):
     42        * inspector/InspectorTimelineAgent.h:
     43        * inspector/front-end/NetworkManager.js:
     44        (WebInspector.NetworkManager):
     45        (WebInspector.NetworkManager.prototype.frontendReused):
     46        * inspector/front-end/inspector.js:
     47        (WebInspector.frontendReused):
     48
    1492011-03-03  Andras Becsi  <abecsi@webkit.org>
    250
  • trunk/Source/WebCore/inspector/Inspector.idl

    r80204 r80239  
    9393
    9494    interface [Conditional=INSPECTOR] Network {
    95         void cachedResources(out Object resources);
     95        void enable(out Object resources);
     96        void disable();
    9697        void resourceContent(in unsigned long frameId, in String url, in boolean base64Encode, out boolean success, out String content);
    9798        void setExtraHeaders(in Object headers);
  • trunk/Source/WebCore/inspector/InspectorAgent.cpp

    r80204 r80239  
    149149    , m_state(new InspectorState(client))
    150150    , m_timelineAgent(InspectorTimelineAgent::create(m_instrumentingAgents.get(), m_state.get()))
     151    , m_resourceAgent(InspectorResourceAgent::create(m_instrumentingAgents.get(), page, m_state.get()))
    151152    , m_consoleAgent(new InspectorConsoleAgent(m_instrumentingAgents.get(), this, m_state.get(), m_injectedScriptHost.get(), m_domAgent.get()))
    152153#if ENABLE(JAVASCRIPT_DEBUGGER)
     
    171172void InspectorAgent::inspectedPageDestroyed()
    172173{
    173     if (m_frontend)
     174    if (m_frontend) {
    174175        m_frontend->inspector()->disconnectFromBackend();
     176        disconnectFrontend();
     177    }
    175178
    176179    ErrorString error;
     
    206209    pushDataCollectedOffline();
    207210
    208     m_resourceAgent = InspectorResourceAgent::restore(m_inspectedPage, m_state.get(), m_frontend);
    209     m_timelineAgent->restore(m_state.get(), m_frontend);
     211    m_resourceAgent->restore();
     212    m_timelineAgent->restore();
    210213
    211214#if ENABLE(JAVASCRIPT_DEBUGGER)
     
    366369    m_consoleAgent->setFrontend(m_frontend);
    367370    m_timelineAgent->setFrontend(m_frontend);
     371    m_resourceAgent->setFrontend(m_frontend);
    368372#if ENABLE(JAVASCRIPT_DEBUGGER)
    369373    m_debuggerAgent->setFrontend(m_frontend);
     
    408412    m_domAgent->clearFrontend();
    409413    m_timelineAgent->clearFrontend();
     414    m_resourceAgent->clearFrontend();
    410415#if ENABLE(DATABASE)
    411416    m_databaseAgent->clearFrontend();
     
    419424}
    420425
    421 InspectorResourceAgent* InspectorAgent::resourceAgent()
    422 {
    423     if (!m_resourceAgent && m_frontend)
    424         m_resourceAgent = InspectorResourceAgent::create(m_inspectedPage, m_state.get(), m_frontend);
    425     return m_resourceAgent.get();
    426 }
    427 
    428426void InspectorAgent::createFrontendLifetimeAgents()
    429427{
     
    437435void InspectorAgent::releaseFrontendLifetimeAgents()
    438436{
    439     m_resourceAgent.clear();
    440437    m_runtimeAgent.clear();
    441438#if ENABLE(OFFLINE_WEB_APPLICATIONS)
     
    508505        return;
    509506
    510     if (m_resourceAgent)
    511         m_resourceAgent->didCommitLoad(loader);
     507    if (InspectorResourceAgent* resourceAgent = m_instrumentingAgents->inspectorResourceAgent())
     508        resourceAgent->didCommitLoad(loader);
    512509
    513510    ASSERT(m_inspectedPage);
     
    760757}
    761758
    762 #if ENABLE(WEB_SOCKETS)
    763 void InspectorAgent::didCreateWebSocket(unsigned long identifier, const KURL& requestURL, const KURL& documentURL)
    764 {
    765     if (!enabled())
    766         return;
    767     ASSERT(m_inspectedPage);
    768 
    769     if (m_resourceAgent)
    770         m_resourceAgent->didCreateWebSocket(identifier, requestURL);
    771     UNUSED_PARAM(documentURL);
    772 }
    773 
    774 void InspectorAgent::willSendWebSocketHandshakeRequest(unsigned long identifier, const WebSocketHandshakeRequest& request)
    775 {
    776     if (m_resourceAgent)
    777         m_resourceAgent->willSendWebSocketHandshakeRequest(identifier, request);
    778 }
    779 
    780 void InspectorAgent::didReceiveWebSocketHandshakeResponse(unsigned long identifier, const WebSocketHandshakeResponse& response)
    781 {
    782     if (m_resourceAgent)
    783         m_resourceAgent->didReceiveWebSocketHandshakeResponse(identifier, response);
    784 }
    785 
    786 void InspectorAgent::didCloseWebSocket(unsigned long identifier)
    787 {
    788     if (m_resourceAgent)
    789         m_resourceAgent->didCloseWebSocket(identifier);
    790 }
    791 #endif // ENABLE(WEB_SOCKETS)
    792 
    793759#if ENABLE(JAVASCRIPT_DEBUGGER)
    794760bool InspectorAgent::isRecordingUserInitiatedProfile() const
  • trunk/Source/WebCore/inspector/InspectorAgent.h

    r79858 r80239  
    9595#endif
    9696
    97 #if ENABLE(WEB_SOCKETS)
    98 class WebSocketHandshakeRequest;
    99 class WebSocketHandshakeResponse;
    100 #endif
    101 
    10297typedef String ErrorString;
    10398
     
    137132    void disconnectFrontend();
    138133
    139     InspectorResourceAgent* resourceAgent();
    140 
    141134    InstrumentingAgents* instrumentingAgents() const { return m_instrumentingAgents.get(); }
    142135
     
    147140    InspectorRuntimeAgent* runtimeAgent() { return m_runtimeAgent.get(); }
    148141    InspectorTimelineAgent* timelineAgent() { return m_timelineAgent.get(); }
     142    InspectorResourceAgent* resourceAgent() { return m_resourceAgent.get(); }
    149143#if ENABLE(DATABASE)
    150144    InspectorDatabaseAgent* databaseAgent() { return m_databaseAgent.get(); }
     
    182176    void didCreateWorker(intptr_t, const String& url, bool isSharedWorker);
    183177    void didDestroyWorker(intptr_t);
    184 #endif
    185 
    186 #if ENABLE(WEB_SOCKETS)
    187     void didCreateWebSocket(unsigned long identifier, const KURL& requestURL, const KURL& documentURL);
    188     void willSendWebSocketHandshakeRequest(unsigned long identifier, const WebSocketHandshakeRequest&);
    189     void didReceiveWebSocketHandshakeResponse(unsigned long identifier, const WebSocketHandshakeResponse&);
    190     void didCloseWebSocket(unsigned long identifier);
    191178#endif
    192179
  • trunk/Source/WebCore/inspector/InspectorBrowserDebuggerAgent.cpp

    r79878 r80239  
    8686{
    8787    m_debuggerAgent->setListener(0);
    88     clearFrontend();
     88    ASSERT(!m_instrumentingAgents->inspectorBrowserDebuggerAgent());
    8989}
    9090
  • trunk/Source/WebCore/inspector/InspectorDebuggerAgent.cpp

    r80204 r80239  
    6969InspectorDebuggerAgent::~InspectorDebuggerAgent()
    7070{
    71     ScriptDebugServer::shared().removeListener(this, m_inspectedPage);
    72     m_pausedScriptState = 0;
     71    ASSERT(!m_instrumentingAgents->inspectorDebuggerAgent());
    7372}
    7473
  • trunk/Source/WebCore/inspector/InspectorInstrumentation.cpp

    r79858 r80239  
    625625
    626626#if ENABLE(WEB_SOCKETS)
    627 void InspectorInstrumentation::didCreateWebSocketImpl(InspectorAgent* inspectorAgent, unsigned long identifier, const KURL& requestURL, const KURL& documentURL)
    628 {
    629     inspectorAgent->didCreateWebSocket(identifier, requestURL, documentURL);
     627void InspectorInstrumentation::didCreateWebSocketImpl(InspectorAgent* inspectorAgent, unsigned long identifier, const KURL& requestURL, const KURL&)
     628{
     629    if (!inspectorAgent->enabled())
     630        return;
     631    if (InspectorResourceAgent* resourceAgent = retrieveResourceAgent(inspectorAgent))
     632        resourceAgent->didCreateWebSocket(identifier, requestURL);
    630633}
    631634
    632635void InspectorInstrumentation::willSendWebSocketHandshakeRequestImpl(InspectorAgent* inspectorAgent, unsigned long identifier, const WebSocketHandshakeRequest& request)
    633636{
    634     inspectorAgent->willSendWebSocketHandshakeRequest(identifier, request);
     637    if (InspectorResourceAgent* resourceAgent = retrieveResourceAgent(inspectorAgent))
     638        resourceAgent->willSendWebSocketHandshakeRequest(identifier, request);
    635639}
    636640
    637641void InspectorInstrumentation::didReceiveWebSocketHandshakeResponseImpl(InspectorAgent* inspectorAgent, unsigned long identifier, const WebSocketHandshakeResponse& response)
    638642{
    639     inspectorAgent->didReceiveWebSocketHandshakeResponse(identifier, response);
     643    if (InspectorResourceAgent* resourceAgent = retrieveResourceAgent(inspectorAgent))
     644        resourceAgent->didReceiveWebSocketHandshakeResponse(identifier, response);
    640645}
    641646
    642647void InspectorInstrumentation::didCloseWebSocketImpl(InspectorAgent* inspectorAgent, unsigned long identifier)
    643648{
    644     inspectorAgent->didCloseWebSocket(identifier);
     649    if (InspectorResourceAgent* resourceAgent = retrieveResourceAgent(inspectorAgent))
     650        resourceAgent->didCloseWebSocket(identifier);
    645651}
    646652#endif
     
    696702InspectorResourceAgent* InspectorInstrumentation::retrieveResourceAgent(InspectorAgent* inspectorAgent)
    697703{
    698     return inspectorAgent->resourceAgent();
     704    return inspectorAgent->instrumentingAgents()->inspectorResourceAgent();
    699705}
    700706
  • trunk/Source/WebCore/inspector/InspectorResourceAgent.cpp

    r80204 r80239  
    4848#include "InspectorState.h"
    4949#include "InspectorValues.h"
     50#include "InstrumentingAgents.h"
    5051#include "KURL.h"
    5152#include "Page.h"
     
    7374}
    7475
    75 PassRefPtr<InspectorResourceAgent> InspectorResourceAgent::restore(Page* page, InspectorState* state, InspectorFrontend* frontend)
    76 {
    77     if (state->getBoolean(ResourceAgentState::resourceAgentEnabled))
    78         return create(page, state, frontend);
    79     return 0;
     76void InspectorResourceAgent::setFrontend(InspectorFrontend* frontend)
     77{
     78    m_frontend = frontend->network();
     79}
     80
     81void InspectorResourceAgent::clearFrontend()
     82{
     83    m_frontend = 0;
     84    disable(0);
     85}
     86
     87void InspectorResourceAgent::restore()
     88{
     89    if (m_state->getBoolean(ResourceAgentState::resourceAgentEnabled))
     90        enable();
    8091}
    8192
     
    297308InspectorResourceAgent::~InspectorResourceAgent()
    298309{
    299     m_state->setBoolean(ResourceAgentState::resourceAgentEnabled, false);
     310    ASSERT(!m_instrumentingAgents->inspectorResourceAgent());
    300311}
    301312
     
    499510}
    500511
    501 void InspectorResourceAgent::cachedResources(ErrorString*, RefPtr<InspectorObject>* object)
    502 {
     512void InspectorResourceAgent::enable(ErrorString*, RefPtr<InspectorObject>* object)
     513{
     514    enable();
    503515    *object = buildObjectForFrameTree(m_page->mainFrame(), true);
     516}
     517
     518void InspectorResourceAgent::enable()
     519{
     520    if (!m_frontend)
     521        return;
     522    m_state->setBoolean(ResourceAgentState::resourceAgentEnabled, true);
     523    m_instrumentingAgents->setInspectorResourceAgent(this);
     524}
     525
     526void InspectorResourceAgent::disable(ErrorString*)
     527{
     528    m_state->setBoolean(ResourceAgentState::resourceAgentEnabled, false);
     529    m_instrumentingAgents->setInspectorResourceAgent(0);
    504530}
    505531
     
    517543}
    518544
    519 InspectorResourceAgent::InspectorResourceAgent(Page* page, InspectorState* state, InspectorFrontend* frontend)
    520     : m_page(page)
     545InspectorResourceAgent::InspectorResourceAgent(InstrumentingAgents* instrumentingAgents, Page* page, InspectorState* state)
     546    : m_instrumentingAgents(instrumentingAgents)
     547    , m_page(page)
    521548    , m_state(state)
    522     , m_frontend(frontend->network())
    523 {
    524     m_state->setBoolean(ResourceAgentState::resourceAgentEnabled, true);
     549    , m_frontend(0)
     550{
    525551}
    526552
  • trunk/Source/WebCore/inspector/InspectorResourceAgent.h

    r80204 r80239  
    5454class InspectorObject;
    5555class InspectorState;
     56class InstrumentingAgents;
    5657class KURL;
    5758class Page;
     
    7071class InspectorResourceAgent : public RefCounted<InspectorResourceAgent> {
    7172public:
    72     static PassRefPtr<InspectorResourceAgent> create(Page* page, InspectorState* state, InspectorFrontend* frontend)
     73    static PassRefPtr<InspectorResourceAgent> create(InstrumentingAgents* instrumentingAgents, Page* page, InspectorState* state)
    7374    {
    74         return adoptRef(new InspectorResourceAgent(page, state, frontend));
     75        return adoptRef(new InspectorResourceAgent(instrumentingAgents, page, state));
    7576    }
     77
     78    void setFrontend(InspectorFrontend*);
     79    void clearFrontend();
     80    void restore();
    7681
    7782    static PassRefPtr<InspectorResourceAgent> restore(Page*, InspectorState*, InspectorFrontend*);
     
    106111
    107112    // Called from frontend
    108     void cachedResources(ErrorString*, RefPtr<InspectorObject>*);
     113    void enable(ErrorString*, RefPtr<InspectorObject>*);
     114    void disable(ErrorString*);
    109115    void resourceContent(ErrorString*, unsigned long frameId, const String& url, bool base64Encode, bool* resourceFound, String* content);
    110116    void setExtraHeaders(ErrorString*, PassRefPtr<InspectorObject>);
    111117
    112118private:
    113     InspectorResourceAgent(Page* page, InspectorState*, InspectorFrontend* frontend);
     119    InspectorResourceAgent(InstrumentingAgents*, Page*, InspectorState*);
    114120
     121    void enable();
     122
     123    InstrumentingAgents* m_instrumentingAgents;
    115124    Page* m_page;
    116125    InspectorState* m_state;
  • trunk/Source/WebCore/inspector/InspectorTimelineAgent.cpp

    r80204 r80239  
    8888}
    8989
    90 void InspectorTimelineAgent::restore(InspectorState* state, InspectorFrontend* frontend)
    91 {
    92     setFrontend(frontend);
    93     if (state->getBoolean(TimelineAgentState::timelineAgentEnabled)) {
     90void InspectorTimelineAgent::restore()
     91{
     92    if (m_state->getBoolean(TimelineAgentState::timelineAgentEnabled)) {
    9493        ErrorString error;
    9594        start(&error);
  • trunk/Source/WebCore/inspector/InspectorTimelineAgent.h

    r80204 r80239  
    8989    void setFrontend(InspectorFrontend*);
    9090    void clearFrontend();
    91 
    92     void restore(InspectorState*, InspectorFrontend*);
     91    void restore();
    9392
    9493    void start(ErrorString* error);
  • trunk/Source/WebCore/inspector/front-end/NetworkManager.js

    r78717 r80239  
    3434    this._resourceTreeModel = resourceTreeModel;
    3535    this._dispatcher = new WebInspector.NetworkDispatcher(resourceTreeModel, this);
    36     NetworkAgent.cachedResources(this._processCachedResources.bind(this));
     36    NetworkAgent.enable(this._processCachedResources.bind(this));
    3737}
    3838
     
    4545
    4646WebInspector.NetworkManager.prototype = {
    47     reset: function()
     47    frontendReused: function()
    4848    {
    4949        WebInspector.panels.network.clear();
    5050        this._resourceTreeModel.reset();
    51         NetworkAgent.cachedResources(this._processCachedResources.bind(this));
     51        NetworkAgent.enable(this._processCachedResources.bind(this));
    5252    },
    5353
  • trunk/Source/WebCore/inspector/front-end/inspector.js

    r80204 r80239  
    14071407WebInspector.frontendReused = function()
    14081408{
    1409     this.networkManager.reset();
     1409    this.networkManager.frontendReused();
    14101410    this.reset();
    14111411}
Note: See TracChangeset for help on using the changeset viewer.