Changeset 52154 in webkit


Ignore:
Timestamp:
Dec 15, 2009 8:36:24 AM (14 years ago)
Author:
pfeldman@chromium.org
Message:

2009-12-15 Pavel Feldman <pfeldman@chromium.org>

Reviewed by Timothy Hatcher.

Web Inspector: Do not lose HTTP redirect information, display it
in the Resources Panel.

https://bugs.webkit.org/show_bug.cgi?id=32551

  • inspector/InspectorController.cpp: (WebCore::InspectorController::populateScriptObjects): (WebCore::InspectorController::didCommitLoad): (WebCore::InspectorController::didLoadResourceFromMemoryCache): (WebCore::InspectorController::identifierForInitialRequest): (WebCore::InspectorController::willSendRequest): (WebCore::InspectorController::didReceiveResponse): (WebCore::InspectorController::didReceiveContentLength): (WebCore::InspectorController::didFinishLoading): (WebCore::InspectorController::didFailLoading):
  • inspector/InspectorFrontend.cpp:
  • inspector/InspectorFrontend.h:
  • inspector/InspectorResource.cpp: (WebCore::InspectorResource::InspectorResource): (WebCore::InspectorResource::appendRedirect): (WebCore::InspectorResource::updateScriptObject): (WebCore::InspectorResource::releaseScriptObject): (WebCore::InspectorResource::type):
  • inspector/InspectorResource.h: (WebCore::InspectorResource::): (WebCore::InspectorResource::Changes::setAll):
  • inspector/front-end/inspector.js: (WebInspector._addResource): (WebInspector.updateResource):
Location:
trunk/WebCore
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebCore/ChangeLog

    r52153 r52154  
     12009-12-15  Pavel Feldman  <pfeldman@chromium.org>
     2
     3        Reviewed by Timothy Hatcher.
     4
     5        Web Inspector: Do not lose HTTP redirect information, display it
     6        in the Resources Panel.
     7
     8        https://bugs.webkit.org/show_bug.cgi?id=32551
     9
     10        * inspector/InspectorController.cpp:
     11        (WebCore::InspectorController::populateScriptObjects):
     12        (WebCore::InspectorController::didCommitLoad):
     13        (WebCore::InspectorController::didLoadResourceFromMemoryCache):
     14        (WebCore::InspectorController::identifierForInitialRequest):
     15        (WebCore::InspectorController::willSendRequest):
     16        (WebCore::InspectorController::didReceiveResponse):
     17        (WebCore::InspectorController::didReceiveContentLength):
     18        (WebCore::InspectorController::didFinishLoading):
     19        (WebCore::InspectorController::didFailLoading):
     20        * inspector/InspectorFrontend.cpp:
     21        * inspector/InspectorFrontend.h:
     22        * inspector/InspectorResource.cpp:
     23        (WebCore::InspectorResource::InspectorResource):
     24        (WebCore::InspectorResource::appendRedirect):
     25        (WebCore::InspectorResource::updateScriptObject):
     26        (WebCore::InspectorResource::releaseScriptObject):
     27        (WebCore::InspectorResource::type):
     28        * inspector/InspectorResource.h:
     29        (WebCore::InspectorResource::):
     30        (WebCore::InspectorResource::Changes::setAll):
     31        * inspector/front-end/inspector.js:
     32        (WebInspector._addResource):
     33        (WebInspector.updateResource):
     34
    1352009-12-15  Holger Hans Peter Freyther  <zecke@selfish.org>
    236
  • trunk/WebCore/inspector/InspectorController.cpp

    r51846 r52154  
    649649    ResourcesMap::iterator resourcesEnd = m_resources.end();
    650650    for (ResourcesMap::iterator it = m_resources.begin(); it != resourcesEnd; ++it)
    651         it->second->createScriptObject(m_frontend.get());
     651        it->second->updateScriptObject(m_frontend.get());
    652652
    653653    unsigned messageCount = m_consoleMessages.size();
     
    759759                // list of resources for the page they are navigating away from.
    760760                if (windowVisible())
    761                     m_mainResource->createScriptObject(m_frontend.get());
     761                    m_mainResource->updateScriptObject(m_frontend.get());
    762762            } else {
    763763                // Pages loaded from the page cache are committed before
     
    854854        return;
    855855
    856     RefPtr<InspectorResource> resource = InspectorResource::createCached(m_inspectedPage->progress()->createUniqueIdentifier() , loader, cachedResource);
     856    RefPtr<InspectorResource> resource = InspectorResource::createCached(m_inspectedPage->progress()->createUniqueIdentifier(), loader, cachedResource);
    857857
    858858    if (isMainResource) {
     
    864864
    865865    if (windowVisible())
    866         resource->createScriptObject(m_frontend.get());
     866        resource->updateScriptObject(m_frontend.get());
    867867}
    868868
     
    890890
    891891    if (windowVisible() && loader->frameLoader()->isLoadingFromCachedPage() && resource == m_mainResource)
    892         resource->createScriptObject(m_frontend.get());
     892        resource->updateScriptObject(m_frontend.get());
    893893}
    894894
     
    932932        return;
    933933
     934    if (!redirectResponse.isNull()) {
     935        // We always store last redirect by the original id key. Rest of the redirects are stored within the last one.
     936        unsigned long id = m_inspectedPage->progress()->createUniqueIdentifier();
     937        RefPtr<InspectorResource> withRedirect = resource->appendRedirect(id, request, redirectResponse);
     938        removeResource(resource.get());
     939        addResource(withRedirect.get());
     940        if (isMainResource) {
     941            m_mainResource = withRedirect;
     942            withRedirect->markMainResource();
     943        }
     944        resource = withRedirect;
     945    }
     946
    934947    resource->startTiming();
    935 
    936     if (!redirectResponse.isNull()) {
    937         resource->updateRequest(request);
    938         resource->updateResponse(redirectResponse);
    939     }
    940 
    941948    if (resource != m_mainResource && windowVisible())
    942         resource->createScriptObject(m_frontend.get());
     949        resource->updateScriptObject(m_frontend.get());
    943950}
    944951
     
    955962    resource->markResponseReceivedTime();
    956963
    957     if (windowVisible())
     964    if (resource != m_mainResource && windowVisible())
    958965        resource->updateScriptObject(m_frontend.get());
    959966}
     
    967974    resource->addLength(lengthReceived);
    968975
    969     if (windowVisible())
     976    if (resource != m_mainResource && windowVisible())
    970977        resource->updateScriptObject(m_frontend.get());
    971978}
     
    980987        return;
    981988
    982     removeResource(resource.get());
    983 
    984989    resource->endTiming();
    985990
    986     addResource(resource.get());
    987 
    988     if (windowVisible())
     991    if (resource != m_mainResource && windowVisible())
    989992        resource->updateScriptObject(m_frontend.get());
    990993}
     
    9991002        return;
    10001003
    1001     removeResource(resource.get());
    1002 
    10031004    resource->markFailed();
    10041005    resource->endTiming();
    10051006
    1006     addResource(resource.get());
    1007 
    1008     if (windowVisible())
     1007    if (resource != m_mainResource && windowVisible())
    10091008        resource->updateScriptObject(m_frontend.get());
    10101009}
  • trunk/WebCore/inspector/InspectorFrontend.cpp

    r51839 r52154  
    107107}
    108108
    109 bool InspectorFrontend::addResource(unsigned long identifier, const ScriptObject& resourceObj)
    110 {
    111     ScriptFunctionCall function(m_scriptState, m_webInspector, "dispatch");
    112     function.appendArgument("addResource");
    113     function.appendArgument(identifier);
    114     function.appendArgument(resourceObj);
    115     bool hadException = false;
    116     function.call(hadException);
    117     return !hadException;
    118 }
    119 
    120109bool InspectorFrontend::updateResource(unsigned long identifier, const ScriptObject& resourceObj)
    121110{
  • trunk/WebCore/inspector/InspectorFrontend.h

    r51839 r52154  
    6868        void clearConsoleMessages();
    6969
    70         bool addResource(unsigned long identifier, const ScriptObject& resourceObj);
    7170        bool updateResource(unsigned long identifier, const ScriptObject& resourceObj);
    7271        void removeResource(unsigned long identifier);
  • trunk/WebCore/inspector/InspectorResource.cpp

    r51440 r52154  
    5151    , m_loader(loader)
    5252    , m_frame(loader->frame())
    53     , m_scriptObjectCreated(false)
    5453    , m_expectedContentLength(0)
    5554    , m_cached(false)
     
    7170}
    7271
     72PassRefPtr<InspectorResource> InspectorResource::appendRedirect(unsigned long identifier, const ResourceRequest& request, const ResourceResponse& redirectResponse)
     73{
     74    // Last redirect is always a container of all previous ones. Pass this container here.
     75    RefPtr<InspectorResource> redirect = InspectorResource::create(m_identifier, m_loader.get());
     76    redirect->m_redirects = m_redirects;
     77    redirect->m_redirects.append(this);
     78    redirect->m_changes.set(RedirectsChange);
     79    redirect->updateRequest(request);
     80
     81    m_identifier = identifier;
     82    m_redirects.clear();
     83    updateResponse(redirectResponse);
     84    markResponseReceivedTime();
     85    endTiming();
     86    return redirect;
     87}
     88
    7389PassRefPtr<InspectorResource> InspectorResource::createCached(unsigned long identifier, DocumentLoader* loader, const CachedResource* cachedResource)
    7490{
     
    127143}
    128144
    129 void InspectorResource::createScriptObject(InspectorFrontend* frontend)
    130 {
    131     if (!m_scriptObjectCreated) {
    132         ScriptObject jsonObject = frontend->newScriptObject();
    133         ScriptObject requestHeaders = frontend->newScriptObject();
    134         populateHeadersObject(&requestHeaders, m_requestHeaderFields);
    135         jsonObject.set("requestHeaders", requestHeaders);
    136         jsonObject.set("documentURL", m_frame->document()->url().string());
    137         jsonObject.set("requestURL", requestURL());
    138         jsonObject.set("host", m_requestURL.host());
    139         jsonObject.set("path", m_requestURL.path());
    140         jsonObject.set("lastPathComponent", m_requestURL.lastPathComponent());
    141         jsonObject.set("isMainResource", m_isMainResource);
    142         jsonObject.set("cached", m_cached);
    143         jsonObject.set("requestMethod", m_requestMethod);
    144         jsonObject.set("requestFormData", m_requestFormData);
    145         if (!frontend->addResource(m_identifier, jsonObject))
    146             return;
    147 
    148         m_scriptObjectCreated = true;
    149         m_changes.clear(RequestChange);
    150     }
    151     updateScriptObject(frontend);
    152 }
    153145
    154146void InspectorResource::updateScriptObject(InspectorFrontend* frontend)
    155147{
    156     if (!m_scriptObjectCreated)
    157         return;
    158 
    159148    if (m_changes.hasChange(NoChange))
    160149        return;
     
    164153        jsonObject.set("url", requestURL());
    165154        jsonObject.set("documentURL", m_frame->document()->url().string());
    166         jsonObject.set("domain", m_requestURL.host());
     155        jsonObject.set("host", m_requestURL.host());
    167156        jsonObject.set("path", m_requestURL.path());
    168157        jsonObject.set("lastPathComponent", m_requestURL.lastPathComponent());
     
    174163        jsonObject.set("requestFormData", m_requestFormData);
    175164        jsonObject.set("didRequestChange", true);
     165        jsonObject.set("cached", m_cached);
    176166    }
    177167
     
    217207        jsonObject.set("didTimingChange", true);
    218208    }
    219     if (!frontend->updateResource(m_identifier, jsonObject))
    220         return;
    221     m_changes.clearAll();
     209
     210    if (m_changes.hasChange(RedirectsChange)) {
     211        for (size_t i = 0; i < m_redirects.size(); ++i)
     212            m_redirects[i]->updateScriptObject(frontend);
     213    }
     214
     215    if (frontend->updateResource(m_identifier, jsonObject))
     216        m_changes.clearAll();
    222217}
    223218
    224219void InspectorResource::releaseScriptObject(InspectorFrontend* frontend, bool callRemoveResource)
    225220{
    226     if (!m_scriptObjectCreated)
    227         return;
    228 
    229     m_scriptObjectCreated = false;
    230221    m_changes.setAll();
    231222
     
    234225
    235226    frontend->removeResource(m_identifier);
     227
     228    for (size_t i = 0; i < m_redirects.size(); ++i)
     229        m_redirects[i]->releaseScriptObject(frontend, callRemoveResource);
    236230}
    237231
     
    289283
    290284    return cachedResourceType();
    291 
    292285}
    293286
  • trunk/WebCore/inspector/InspectorResource.h

    r51439 r52154  
    7878        ~InspectorResource();
    7979
    80         void createScriptObject(InspectorFrontend* frontend);
     80        PassRefPtr<InspectorResource> appendRedirect(unsigned long identifier, const ResourceRequest&, const ResourceResponse& redirectResponse);
    8181        void updateScriptObject(InspectorFrontend* frontend);
    8282        void releaseScriptObject(InspectorFrontend* frontend, bool callRemoveResource);
     
    119119            LengthChange = 8,
    120120            CompletionChange = 16,
    121             TimingChange = 32
     121            TimingChange = 32,
     122            RedirectsChange = 64
    122123        };
    123124
     
    139140            }
    140141
    141             inline void setAll() { m_change = static_cast<ChangeType>(63); }
     142            inline void setAll() { m_change = static_cast<ChangeType>(127); }
    142143            inline void clearAll() { m_change = NoChange; }
    143144
     
    160161        String m_mimeType;
    161162        String m_suggestedFilename;
    162         bool m_scriptObjectCreated;
    163163        long long m_expectedContentLength;
    164164        bool m_cached;
     
    177177        String m_requestMethod;
    178178        String m_requestFormData;
     179        Vector<RefPtr<InspectorResource> > m_redirects;
    179180    };
    180181
  • trunk/WebCore/inspector/front-end/inspector.js

    r52099 r52154  
    963963}
    964964
    965 WebInspector.addResource = function(identifier, payload)
     965WebInspector._addResource = function(identifier, payload)
    966966{
    967967    var resource = new WebInspector.Resource(
    968968        payload.requestHeaders,
    969         payload.requestURL,
     969        payload.url,
    970970        payload.documentURL,
    971971        payload.host,
     
    973973        payload.lastPathComponent,
    974974        identifier,
    975         payload.isMainResource,
     975        payload.mainResource,
    976976        payload.cached,
    977977        payload.requestMethod,
     
    989989    if (match)
    990990        this.addCookieDomain(match[1].toLowerCase() === "file" ? "" : match[2]);
     991
     992    return resource;
    991993}
    992994
     
    10111013{
    10121014    var resource = this.resources[identifier];
    1013     if (!resource)
    1014         return;
     1015    if (!resource) {
     1016        resource = this._addResource(identifier, payload);
     1017        // Request info is already populated in constructor.
     1018        payload.didRequestChange = false;
     1019    }
    10151020
    10161021    if (payload.didRequestChange) {
    10171022        resource.url = payload.url;
    1018         resource.domain = payload.domain;
     1023        resource.host = payload.domain;
    10191024        resource.path = payload.path;
    10201025        resource.lastPathComponent = payload.lastPathComponent;
Note: See TracChangeset for help on using the changeset viewer.