[SCM] WebKit Debian packaging branch, debian/experimental, updated. upstream/1.3.3-9427-gc2be6fc

pfeldman at chromium.org pfeldman at chromium.org
Wed Dec 22 15:14:17 UTC 2010


The following commit has been merged in the debian/experimental branch:
commit d38633fa110b41c9d715d89af286e79ee1b755bb
Author: pfeldman at chromium.org <pfeldman at chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Fri Oct 29 09:00:31 2010 +0000

    2010-10-29  Pavel Feldman  <pfeldman at chromium.org>
    
            Reviewed by Timothy Hatcher.
    
            Web Inspector: make legacy resource tracking optional in the native code,
            make cookeis work against new resource manager.
            https://bugs.webkit.org/show_bug.cgi?id=48532
    
            * inspector/InspectorCSSStore.cpp:
            (WebCore::InspectorCSSStore::resourceStyleSheetText):
            * inspector/InspectorController.cpp:
            (WebCore::InspectorController::InspectorController):
            (WebCore::InspectorController::~InspectorController):
            (WebCore::InspectorController::connectFrontend):
            (WebCore::InspectorController::releaseFrontendLifetimeAgents):
            (WebCore::InspectorController::populateScriptObjects):
            (WebCore::InspectorController::unbindAllResources):
            (WebCore::InspectorController::didCommitLoad):
            (WebCore::InspectorController::frameDetachedFromParent):
            (WebCore::InspectorController::didLoadResourceFromMemoryCache):
            (WebCore::InspectorController::identifierForInitialRequest):
            (WebCore::InspectorController::willSendRequest):
            (WebCore::InspectorController::markResourceAsCached):
            (WebCore::InspectorController::didReceiveResponse):
            (WebCore::InspectorController::didReceiveContentLength):
            (WebCore::InspectorController::didFinishLoading):
            (WebCore::InspectorController::didFailLoading):
            (WebCore::InspectorController::resourceRetrievedByXMLHttpRequest):
            (WebCore::InspectorController::scriptImported):
            (WebCore::InspectorController::setResourceTrackingEnabled):
            (WebCore::InspectorController::getCookies):
            (WebCore::InspectorController::deleteCookie):
            (WebCore::InspectorController::didCreateWebSocket):
            (WebCore::InspectorController::willSendWebSocketHandshakeRequest):
            (WebCore::InspectorController::didReceiveWebSocketHandshakeResponse):
            (WebCore::InspectorController::didCloseWebSocket):
            (WebCore::InspectorController::breakpointsSettingKey):
            (WebCore::InspectorController::getResourceContent):
            * inspector/InspectorController.h:
            * inspector/InspectorResource.cpp:
            (WebCore::InspectorResource::updateScriptObject):
            (WebCore::InspectorResource::markFailed):
            * inspector/InspectorResource.h:
            * inspector/InspectorResourceAgent.cpp:
            (WebCore::populateObjectWithFrameResources):
            * inspector/front-end/CookieItemsView.js:
            (WebInspector.CookieItemsView.prototype._updateWithCookies):
            (WebInspector.CookieItemsView.prototype._filterCookiesForDomain):
            * inspector/front-end/Resource.js:
            (WebInspector.Resource.prototype._mimeTypeIsConsistentWithType):
            (WebInspector.Resource.prototype._checkWarning):
            * inspector/front-end/ResourceManager.js:
            (WebInspector.ResourceManager.prototype._updateResourceWithResponse):
            (WebInspector.ResourceManager.prototype.didFailLoading):
            * inspector/front-end/inspector.js:
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@70853 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index c52e9a7..7fcee1c 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,61 @@
+2010-10-29  Pavel Feldman  <pfeldman at chromium.org>
+
+        Reviewed by Timothy Hatcher.
+
+        Web Inspector: make legacy resource tracking optional in the native code,
+        make cookeis work against new resource manager.
+        https://bugs.webkit.org/show_bug.cgi?id=48532
+
+        * inspector/InspectorCSSStore.cpp:
+        (WebCore::InspectorCSSStore::resourceStyleSheetText):
+        * inspector/InspectorController.cpp:
+        (WebCore::InspectorController::InspectorController):
+        (WebCore::InspectorController::~InspectorController):
+        (WebCore::InspectorController::connectFrontend):
+        (WebCore::InspectorController::releaseFrontendLifetimeAgents):
+        (WebCore::InspectorController::populateScriptObjects):
+        (WebCore::InspectorController::unbindAllResources):
+        (WebCore::InspectorController::didCommitLoad):
+        (WebCore::InspectorController::frameDetachedFromParent):
+        (WebCore::InspectorController::didLoadResourceFromMemoryCache):
+        (WebCore::InspectorController::identifierForInitialRequest):
+        (WebCore::InspectorController::willSendRequest):
+        (WebCore::InspectorController::markResourceAsCached):
+        (WebCore::InspectorController::didReceiveResponse):
+        (WebCore::InspectorController::didReceiveContentLength):
+        (WebCore::InspectorController::didFinishLoading):
+        (WebCore::InspectorController::didFailLoading):
+        (WebCore::InspectorController::resourceRetrievedByXMLHttpRequest):
+        (WebCore::InspectorController::scriptImported):
+        (WebCore::InspectorController::setResourceTrackingEnabled):
+        (WebCore::InspectorController::getCookies):
+        (WebCore::InspectorController::deleteCookie):
+        (WebCore::InspectorController::didCreateWebSocket):
+        (WebCore::InspectorController::willSendWebSocketHandshakeRequest):
+        (WebCore::InspectorController::didReceiveWebSocketHandshakeResponse):
+        (WebCore::InspectorController::didCloseWebSocket):
+        (WebCore::InspectorController::breakpointsSettingKey):
+        (WebCore::InspectorController::getResourceContent):
+        * inspector/InspectorController.h:
+        * inspector/InspectorResource.cpp:
+        (WebCore::InspectorResource::updateScriptObject):
+        (WebCore::InspectorResource::markFailed):
+        * inspector/InspectorResource.h:
+        * inspector/InspectorResourceAgent.cpp:
+        (WebCore::populateObjectWithFrameResources):
+        * inspector/front-end/CookieItemsView.js:
+        (WebInspector.CookieItemsView.prototype._updateWithCookies):
+        (WebInspector.CookieItemsView.prototype._filterCookiesForDomain):
+        * inspector/front-end/Resource.js:
+        (WebInspector.Resource.prototype._mimeTypeIsConsistentWithType):
+        (WebInspector.Resource.prototype._checkWarning):
+        * inspector/front-end/ResourceManager.js:
+        (WebInspector.ResourceManager.prototype._updateResourceWithResponse):
+        (WebInspector.ResourceManager.prototype.didFailLoading):
+        * inspector/front-end/inspector.js:
+        (WebInspector.forAllResources):
+        (WebInspector.updateResource):
+
 2010-10-29  MORITA Hajime <morrita at google.com>
 
         Unreviewed attempt for fixing build break for http://trac.webkit.org/changeset/70847
diff --git a/WebCore/inspector/InspectorCSSStore.cpp b/WebCore/inspector/InspectorCSSStore.cpp
index e0b658f..b75f11b 100644
--- a/WebCore/inspector/InspectorCSSStore.cpp
+++ b/WebCore/inspector/InspectorCSSStore.cpp
@@ -44,6 +44,7 @@
 #include "HTMLHeadElement.h"
 #include "InspectorController.h"
 #include "InspectorResource.h"
+#include "InspectorResourceAgent.h"
 #include "Node.h"
 #include "PlatformString.h"
 #include "SharedBuffer.h"
@@ -142,7 +143,7 @@ String InspectorCSSStore::styleSheetText(long styleSheetId)
 
 bool InspectorCSSStore::resourceStyleSheetText(CSSStyleSheet* styleSheet, String* result)
 {
-    return m_inspectorController->resourceContentForURL(styleSheet->finalURL(), styleSheet->document(), result);
+    return InspectorResourceAgent::resourceContent(styleSheet->document()->frame(), styleSheet->finalURL(), result);
 }
 
 String InspectorCSSStore::inlineStyleSheetText(CSSStyleSheet* styleSheet)
diff --git a/WebCore/inspector/InspectorController.cpp b/WebCore/inspector/InspectorController.cpp
index 31f4505..e08f324 100644
--- a/WebCore/inspector/InspectorController.cpp
+++ b/WebCore/inspector/InspectorController.cpp
@@ -68,7 +68,6 @@
 #include "InspectorFrontendClient.h"
 #include "InspectorInstrumentation.h"
 #include "InspectorProfilerAgent.h"
-#include "InspectorResource.h"
 #include "InspectorResourceAgent.h"
 #include "InspectorState.h"
 #include "InspectorStorageAgent.h"
@@ -101,6 +100,11 @@
 #include <wtf/ListHashSet.h>
 #include <wtf/RefCounted.h>
 #include <wtf/StdLibExtras.h>
+#include <wtf/UnusedParam.h>
+
+#if LEGACY_RESOURCE_TRACKING_ENABLED
+#include "InspectorResource.h"
+#endif
 
 #if ENABLE(DATABASE)
 #include "Database.h"
@@ -140,6 +144,7 @@ InspectorController::InspectorController(Page* page, InspectorClient* client)
     , m_client(client)
     , m_openingFrontend(false)
     , m_cssStore(new InspectorCSSStore(this))
+    , m_mainResourceIdentifier(0)
     , m_loadEventTime(-1.0)
     , m_domContentEventTime(-1.0)
     , m_expiredConsoleMessageCount(0)
@@ -168,7 +173,9 @@ InspectorController::~InspectorController()
     ASSERT(!m_inspectedPage);
     ASSERT(!m_highlightedNode);
 
+#if LEGACY_RESOURCE_TRACKING_ENABLED
     deleteAllValues(m_frameResources);
+#endif
 
     releaseFrontendLifetimeAgents();
 
@@ -225,10 +232,12 @@ bool InspectorController::searchingForNodeInPage() const
     return m_state->getBoolean(InspectorState::searchingForNode);
 }
 
+#if LEGACY_RESOURCE_TRACKING_ENABLED
 bool InspectorController::resourceTrackingEnabled() const
 {
     return m_state->getBoolean(InspectorState::resourceTrackingEnabled);
 }
+#endif
 
 void InspectorController::getInspectorState(RefPtr<InspectorObject>* state)
 {
@@ -482,8 +491,10 @@ void InspectorController::connectFrontend()
     releaseFrontendLifetimeAgents();
     m_frontend = new InspectorFrontend(m_client);
     m_domAgent = InspectorDOMAgent::create(m_cssStore.get(), m_frontend.get());
-    // FIXME: enable resource agent once front-end is ready.
-    // m_resourceAgent = InspectorResourceAgent::create(m_inspectedPage, m_frontend.get());
+
+#if !LEGACY_RESOURCE_TRACKING_ENABLED
+    m_resourceAgent = InspectorResourceAgent::create(m_inspectedPage, m_frontend.get());
+#endif
 
 #if ENABLE(DATABASE)
     m_storageAgent = InspectorStorageAgent::create(m_frontend.get());
@@ -591,7 +602,9 @@ void InspectorController::disconnectFrontend()
 
 void InspectorController::releaseFrontendLifetimeAgents()
 {
+#if !LEGACY_RESOURCE_TRACKING_ENABLED
     m_resourceAgent.clear();
+#endif
 
     // m_domAgent is RefPtr. Remove DOM listeners first to ensure that there are
     // no references to the DOM agent from the DOM tree.
@@ -626,9 +639,12 @@ void InspectorController::populateScriptObjects()
         m_frontend->profilerWasEnabled();
 #endif
 
+#if LEGACY_RESOURCE_TRACKING_ENABLED
     ResourcesMap::iterator resourcesEnd = m_resources.end();
     for (ResourcesMap::iterator it = m_resources.begin(); it != resourcesEnd; ++it)
         it->second->updateScriptObject(m_frontend.get());
+#endif
+
     if (m_domContentEventTime != -1.0)
         m_frontend->domContentEventFired(m_domContentEventTime);
     if (m_loadEventTime != -1.0)
@@ -691,10 +707,12 @@ void InspectorController::restoreProfiler()
 
 void InspectorController::unbindAllResources()
 {
+#if LEGACY_RESOURCE_TRACKING_ENABLED
     ResourcesMap::iterator resourcesEnd = m_resources.end();
     for (ResourcesMap::iterator it = m_resources.begin(); it != resourcesEnd; ++it)
         it->second->releaseScriptObject(0);
-
+#endif
+    
 #if ENABLE(DATABASE)
     DatabaseResourcesMap::iterator databasesEnd = m_databaseResources.end();
     for (DatabaseResourcesMap::iterator it = m_databaseResources.begin(); it != databasesEnd; ++it)
@@ -709,6 +727,7 @@ void InspectorController::unbindAllResources()
         m_timelineAgent->reset();
 }
 
+#if LEGACY_RESOURCE_TRACKING_ENABLED
 void InspectorController::pruneResources(ResourcesMap* resourceMap, DocumentLoader* loaderToKeep)
 {
     ASSERT_ARG(resourceMap, resourceMap);
@@ -727,15 +746,17 @@ void InspectorController::pruneResources(ResourcesMap* resourceMap, DocumentLoad
         }
     }
 }
+#endif
 
 void InspectorController::didCommitLoad(DocumentLoader* loader)
 {
     if (!enabled())
         return;
 
-    if (m_resourceAgent)
-        m_resourceAgent->didCommitLoad(loader);
-
+#if !LEGACY_RESOURCE_TRACKING_ENABLED
+    m_resourceAgent->didCommitLoad(loader);
+#endif
+    
     ASSERT(m_inspectedPage);
 
     if (loader->frame() == m_inspectedPage->mainFrame()) {
@@ -782,6 +803,7 @@ void InspectorController::didCommitLoad(DocumentLoader* loader)
 #endif
 
         if (m_frontend) {
+#if LEGACY_RESOURCE_TRACKING_ENABLED
             if (!loader->frameLoader()->isLoadingFromCachedPage()) {
                 ASSERT(m_mainResource && m_mainResource->isSameLoader(loader));
                 // We don't add the main resource until its load is committed. This is
@@ -795,14 +817,18 @@ void InspectorController::didCommitLoad(DocumentLoader* loader)
                 // identifierForInitialRequest.
                 m_mainResource = 0;
             }
+#endif
+            m_mainResourceIdentifier = 0;
             m_frontend->didCommitLoad();
             m_domAgent->setDocument(m_inspectedPage->mainFrame()->document());
         }
     }
 
+#if LEGACY_RESOURCE_TRACKING_ENABLED
     for (Frame* frame = loader->frame(); frame; frame = frame->tree()->traverseNext(loader->frame()))
         if (ResourcesMap* resourceMap = m_frameResources.get(frame))
             pruneResources(resourceMap, loader);
+#endif
 }
 
 void InspectorController::frameDetachedFromParent(Frame* rootFrame)
@@ -810,14 +836,16 @@ void InspectorController::frameDetachedFromParent(Frame* rootFrame)
     if (!enabled())
         return;
 
-    if (m_resourceAgent)
-        m_resourceAgent->frameDetachedFromParent(rootFrame);
-
+#if LEGACY_RESOURCE_TRACKING_ENABLED
     for (Frame* frame = rootFrame; frame; frame = frame->tree()->traverseNext(rootFrame))
         if (ResourcesMap* resourceMap = m_frameResources.get(frame))
             removeAllResources(resourceMap);
+#else
+    m_resourceAgent->frameDetachedFromParent(rootFrame);
+#endif
 }
 
+#if LEGACY_RESOURCE_TRACKING_ENABLED
 void InspectorController::addResource(InspectorResource* resource)
 {
     m_resources.set(resource->identifier(), resource);
@@ -873,24 +901,14 @@ InspectorResource* InspectorController::getTrackedResource(unsigned long identif
 
     return 0;
 }
-
-InspectorResource* InspectorController::resourceForURL(const String& url)
-{
-    for (InspectorController::ResourcesMap::iterator resIt = m_resources.begin(); resIt != m_resources.end(); ++resIt) {
-        if (resIt->second->requestURL().string() == url)
-            return resIt->second.get();
-    }
-    return 0;
-}
+#endif
 
 void InspectorController::didLoadResourceFromMemoryCache(DocumentLoader* loader, const CachedResource* cachedResource)
 {
     if (!enabled())
         return;
 
-    if (m_resourceAgent)
-        m_resourceAgent->didLoadResourceFromMemoryCache(loader, cachedResource);
-
+#if LEGACY_RESOURCE_TRACKING_ENABLED
     // If the resource URL is already known, we don't need to add it again since this is just a cached load.
     if (m_knownResources.contains(cachedResource->url()))
         return;
@@ -912,6 +930,9 @@ void InspectorController::didLoadResourceFromMemoryCache(DocumentLoader* loader,
 
     if (m_frontend)
         resource->updateScriptObject(m_frontend.get());
+#else
+    m_resourceAgent->didLoadResourceFromMemoryCache(loader, cachedResource);
+#endif
 }
 
 void InspectorController::identifierForInitialRequest(unsigned long identifier, DocumentLoader* loader, const ResourceRequest& request)
@@ -920,10 +941,11 @@ void InspectorController::identifierForInitialRequest(unsigned long identifier,
         return;
     ASSERT(m_inspectedPage);
 
-    if (m_resourceAgent)
-        m_resourceAgent->identifierForInitialRequest(identifier, request.url(), loader);
-
     bool isMainResource = isMainResourceLoader(loader, request.url());
+    if (isMainResource)
+        m_mainResourceIdentifier = identifier;
+
+#if LEGACY_RESOURCE_TRACKING_ENABLED
 
     ensureSettingsLoaded();
     if (!isMainResource && !resourceTrackingEnabled())
@@ -940,6 +962,9 @@ void InspectorController::identifierForInitialRequest(unsigned long identifier,
 
     if (m_frontend && loader->frameLoader()->isLoadingFromCachedPage() && resource == m_mainResource)
         resource->updateScriptObject(m_frontend.get());
+#else
+    m_resourceAgent->identifierForInitialRequest(identifier, request.url(), loader);
+#endif
 }
 
 void InspectorController::mainResourceFiredDOMContentEvent(DocumentLoader* loader, const KURL& url)
@@ -976,23 +1001,22 @@ void InspectorController::willSendRequest(unsigned long identifier, ResourceRequ
     if (!enabled())
         return;
 
-    if (m_resourceAgent)
-        m_resourceAgent->willSendRequest(identifier, request, redirectResponse);
+    request.setReportLoadTiming(true);
+    // Only enable raw headers if front-end is attached, as otherwise we may lack
+    // permissions to fetch the headers.
+    if (m_frontend)
+        request.setReportRawHeaders(true);
+
+    bool isMainResource = m_mainResourceIdentifier == identifier;
 
-    bool isMainResource = (m_mainResource && m_mainResource->identifier() == identifier);
     if (m_timelineAgent)
         m_timelineAgent->willSendResourceRequest(identifier, isMainResource, request);
 
+#if LEGACY_RESOURCE_TRACKING_ENABLED
     RefPtr<InspectorResource> resource = getTrackedResource(identifier);
     if (!resource)
         return;
 
-    request.setReportLoadTiming(true);
-    // Only enable raw headers if front-end is attached, as otherwise we may lack
-    // permissions to fetch the headers.
-    if (m_frontend)
-        request.setReportRawHeaders(true);
-
     if (!redirectResponse.isNull()) {
         // Redirect may have empty URL and we'd like to not crash with invalid HashMap entry.
         // See http/tests/misc/will-send-request-returns-null-on-redirect.html
@@ -1018,6 +1042,9 @@ void InspectorController::willSendRequest(unsigned long identifier, ResourceRequ
 
     if (resource != m_mainResource && m_frontend)
         resource->updateScriptObject(m_frontend.get());
+#else
+    m_resourceAgent->willSendRequest(identifier, request, redirectResponse);
+#endif
 }
 
 void InspectorController::markResourceAsCached(unsigned long identifier)
@@ -1025,11 +1052,12 @@ void InspectorController::markResourceAsCached(unsigned long identifier)
     if (!enabled())
         return;
 
-    if (m_resourceAgent)
-        m_resourceAgent->markResourceAsCached(identifier);
-
+#if LEGACY_RESOURCE_TRACKING_ENABLED
     if (RefPtr<InspectorResource> resource = getTrackedResource(identifier))
         resource->markAsCached();
+#else
+    m_resourceAgent->markResourceAsCached(identifier);
+#endif
 }
 
 void InspectorController::didReceiveResponse(unsigned long identifier, DocumentLoader* loader, const ResourceResponse& response)
@@ -1037,15 +1065,18 @@ void InspectorController::didReceiveResponse(unsigned long identifier, DocumentL
     if (!enabled())
         return;
 
-    if (m_resourceAgent)
-        m_resourceAgent->didReceiveResponse(identifier, loader, response);
-
+#if LEGACY_RESOURCE_TRACKING_ENABLED
     if (RefPtr<InspectorResource> resource = getTrackedResource(identifier)) {
         resource->updateResponse(response);
 
         if (resource != m_mainResource && m_frontend)
             resource->updateScriptObject(m_frontend.get());
     }
+    UNUSED_PARAM(loader);
+#else
+    m_resourceAgent->didReceiveResponse(identifier, loader, response);
+#endif
+
     if (response.httpStatusCode() >= 400) {
         String message = makeString("Failed to load resource: the server responded with a status of ", String::number(response.httpStatusCode()), " (", response.httpStatusText(), ')');
         addMessageToConsole(OtherMessageSource, LogMessageType, ErrorMessageLevel, message, 0, response.url().string());
@@ -1057,9 +1088,7 @@ void InspectorController::didReceiveContentLength(unsigned long identifier, int
     if (!enabled())
         return;
 
-    if (m_resourceAgent)
-        m_resourceAgent->didReceiveContentLength(identifier, lengthReceived);
-
+#if LEGACY_RESOURCE_TRACKING_ENABLED
     RefPtr<InspectorResource> resource = getTrackedResource(identifier);
     if (!resource)
         return;
@@ -1068,6 +1097,9 @@ void InspectorController::didReceiveContentLength(unsigned long identifier, int
 
     if (resource != m_mainResource && m_frontend)
         resource->updateScriptObject(m_frontend.get());
+#else
+    m_resourceAgent->didReceiveContentLength(identifier, lengthReceived);
+#endif
 }
 
 void InspectorController::didFinishLoading(unsigned long identifier, double finishTime)
@@ -1075,12 +1107,10 @@ void InspectorController::didFinishLoading(unsigned long identifier, double fini
     if (!enabled())
         return;
 
-    if (m_resourceAgent)
-        m_resourceAgent->didFinishLoading(identifier, finishTime);
-
     if (m_timelineAgent)
         m_timelineAgent->didFinishLoadingResource(identifier, false, finishTime);
 
+#if LEGACY_RESOURCE_TRACKING_ENABLED
     RefPtr<InspectorResource> resource = getTrackedResource(identifier);
     if (!resource)
         return;
@@ -1090,6 +1120,9 @@ void InspectorController::didFinishLoading(unsigned long identifier, double fini
     // No need to mute this event for main resource since it happens after did commit load.
     if (m_frontend)
         resource->updateScriptObject(m_frontend.get());
+#else
+    m_resourceAgent->didFinishLoading(identifier, finishTime);
+#endif
 }
 
 void InspectorController::didFailLoading(unsigned long identifier, const ResourceError& error)
@@ -1097,27 +1130,28 @@ void InspectorController::didFailLoading(unsigned long identifier, const Resourc
     if (!enabled())
         return;
 
-    if (m_resourceAgent)
-        m_resourceAgent->didFailLoading(identifier, error);
-
     if (m_timelineAgent)
         m_timelineAgent->didFinishLoadingResource(identifier, true, 0);
 
     String message = "Failed to load resource";
-    if (!error.localizedDescription().isEmpty())
-        message += ": " + error.localizedDescription();
-    addMessageToConsole(OtherMessageSource, LogMessageType, ErrorMessageLevel, message, 0, error.failingURL());
+        if (!error.localizedDescription().isEmpty())
+            message += ": " + error.localizedDescription();
+        addMessageToConsole(OtherMessageSource, LogMessageType, ErrorMessageLevel, message, 0, error.failingURL());
 
+#if LEGACY_RESOURCE_TRACKING_ENABLED
     RefPtr<InspectorResource> resource = getTrackedResource(identifier);
     if (!resource)
         return;
 
-    resource->markFailed();
+    resource->markFailed(error.localizedDescription());
     resource->endTiming(0);
 
     // No need to mute this event for main resource since it happens after did commit load.
     if (m_frontend)
         resource->updateScriptObject(m_frontend.get());
+#else
+    m_resourceAgent->didFailLoading(identifier, error);
+#endif
 }
 
 void InspectorController::resourceRetrievedByXMLHttpRequest(unsigned long identifier, const String& sourceString, const String& url, const String& sendURL, unsigned sendLineNumber)
@@ -1125,12 +1159,10 @@ void InspectorController::resourceRetrievedByXMLHttpRequest(unsigned long identi
     if (!enabled())
         return;
 
-    if (m_resourceAgent)
-        m_resourceAgent->setOverrideContent(identifier, sourceString, InspectorResource::XHR);
-
     if (m_state->getBoolean(InspectorState::monitoringXHR))
         addMessageToConsole(JSMessageSource, LogMessageType, LogMessageLevel, "XHR finished loading: \"" + url + "\".", sendLineNumber, sendURL);
 
+#if LEGACY_RESOURCE_TRACKING_ENABLED
     if (!resourceTrackingEnabled())
         return;
 
@@ -1142,6 +1174,9 @@ void InspectorController::resourceRetrievedByXMLHttpRequest(unsigned long identi
 
     if (m_frontend)
         resource->updateScriptObject(m_frontend.get());
+#else
+    m_resourceAgent->setOverrideContent(identifier, sourceString, InspectorResource::XHR);
+#endif
 }
 
 void InspectorController::scriptImported(unsigned long identifier, const String& sourceString)
@@ -1149,9 +1184,7 @@ void InspectorController::scriptImported(unsigned long identifier, const String&
     if (!enabled())
         return;
 
-    if (m_resourceAgent)
-        m_resourceAgent->setOverrideContent(identifier, sourceString, InspectorResource::Script);
-
+#if LEGACY_RESOURCE_TRACKING_ENABLED
     if (!resourceTrackingEnabled())
         return;
 
@@ -1163,8 +1196,12 @@ void InspectorController::scriptImported(unsigned long identifier, const String&
 
     if (m_frontend)
         resource->updateScriptObject(m_frontend.get());
+#else
+    m_resourceAgent->setOverrideContent(identifier, sourceString, InspectorResource::Script);
+#endif
 }
 
+#if LEGACY_RESOURCE_TRACKING_ENABLED
 void InspectorController::setResourceTrackingEnabled(bool enable)
 {
     if (!enabled())
@@ -1173,9 +1210,11 @@ void InspectorController::setResourceTrackingEnabled(bool enable)
     ASSERT(m_inspectedPage);
     m_state->setBoolean(InspectorState::resourceTrackingEnabled, enable);
 }
+#endif
 
 void InspectorController::setResourceTrackingEnabled(bool enable, bool always, bool* newState)
 {
+#if LEGACY_RESOURCE_TRACKING_ENABLED
     *newState = enable;
 
     if (always)
@@ -1189,6 +1228,11 @@ void InspectorController::setResourceTrackingEnabled(bool enable, bool always, b
 
     if (enable)
         reloadPage();
+#else
+    UNUSED_PARAM(enable);
+    UNUSED_PARAM(always);
+    UNUSED_PARAM(newState);
+#endif
 }
 
 void InspectorController::ensureSettingsLoaded()
@@ -1348,33 +1392,35 @@ void InspectorController::getCookies(RefPtr<InspectorArray>* cookies, WTF::Strin
     // always return the same true/false value.
     bool rawCookiesImplemented = false;
 
-    ResourcesMap::iterator resourcesEnd = m_resources.end();
-    for (ResourcesMap::iterator it = m_resources.begin(); it != resourcesEnd; ++it) {
-        Document* document = it->second->frame()->document();
-        Vector<Cookie> docCookiesList;
-        rawCookiesImplemented = getRawCookies(document, it->second->requestURL(), docCookiesList);
-
-        if (!rawCookiesImplemented) {
-            // FIXME: We need duplication checking for the String representation of cookies.
-            ExceptionCode ec = 0;
-            stringCookiesList += document->cookie(ec);
-            // Exceptions are thrown by cookie() in sandboxed frames. That won't happen here
-            // because "document" is the document of the main frame of the page.
-            ASSERT(!ec);
-        } else {
-            int cookiesSize = docCookiesList.size();
-            for (int i = 0; i < cookiesSize; i++) {
-                if (!rawCookiesList.contains(docCookiesList[i]))
-                    rawCookiesList.add(docCookiesList[i]);
+    for (Frame* frame = m_inspectedPage->mainFrame(); frame; frame = frame->tree()->traverseNext(m_inspectedPage->mainFrame())) {
+        Document* document = frame->document();
+        const CachedResourceLoader::DocumentResourceMap& allResources = document->cachedResourceLoader()->allCachedResources();
+        CachedResourceLoader::DocumentResourceMap::const_iterator end = allResources.end();
+        for (CachedResourceLoader::DocumentResourceMap::const_iterator it = allResources.begin(); it != end; ++it) {
+            Vector<Cookie> docCookiesList;
+            rawCookiesImplemented = getRawCookies(document, KURL(ParsedURLString, it->second->url()), docCookiesList);
+
+            if (!rawCookiesImplemented) {
+                // FIXME: We need duplication checking for the String representation of cookies.
+                ExceptionCode ec = 0;
+                stringCookiesList += document->cookie(ec);
+                // Exceptions are thrown by cookie() in sandboxed frames. That won't happen here
+                // because "document" is the document of the main frame of the page.
+                ASSERT(!ec);
+            } else {
+                int cookiesSize = docCookiesList.size();
+                for (int i = 0; i < cookiesSize; i++) {
+                    if (!rawCookiesList.contains(docCookiesList[i]))
+                        rawCookiesList.add(docCookiesList[i]);
+                }
             }
         }
     }
 
     if (rawCookiesImplemented)
         *cookies = buildArrayForCookies(rawCookiesList);
-    else {
+    else
         *cookiesString = stringCookiesList;
-    }
 }
 
 PassRefPtr<InspectorArray> InspectorController::buildArrayForCookies(ListHashSet<Cookie>& cookiesList)
@@ -1406,11 +1452,14 @@ PassRefPtr<InspectorObject> InspectorController::buildObjectForCookie(const Cook
 
 void InspectorController::deleteCookie(const String& cookieName, const String& domain)
 {
-    ResourcesMap::iterator resourcesEnd = m_resources.end();
-    for (ResourcesMap::iterator it = m_resources.begin(); it != resourcesEnd; ++it) {
-        Document* document = it->second->frame()->document();
-        if (document->url().host() == domain)
-            WebCore::deleteCookie(document, it->second->requestURL(), cookieName);
+    for (Frame* frame = m_inspectedPage->mainFrame(); frame; frame = frame->tree()->traverseNext(m_inspectedPage->mainFrame())) {
+        Document* document = frame->document();
+        if (document->url().host() != domain)
+            continue;
+        const CachedResourceLoader::DocumentResourceMap& allResources = document->cachedResourceLoader()->allCachedResources();
+        CachedResourceLoader::DocumentResourceMap::const_iterator end = allResources.end();
+        for (CachedResourceLoader::DocumentResourceMap::const_iterator it = allResources.begin(); it != end; ++it)
+            WebCore::deleteCookie(document, KURL(ParsedURLString, it->second->url()), cookieName);
     }
 }
 
@@ -1508,21 +1557,21 @@ void InspectorController::didCreateWebSocket(unsigned long identifier, const KUR
         return;
     ASSERT(m_inspectedPage);
 
-    if (m_resourceAgent)
-        m_resourceAgent->didCreateWebSocket(identifier, requestURL);
-
+#if LEGACY_RESOURCE_TRACKING_ENABLED
     RefPtr<InspectorResource> resource = InspectorResource::createWebSocket(identifier, requestURL, documentURL);
     addResource(resource.get());
 
     if (m_frontend)
         resource->updateScriptObject(m_frontend.get());
+#else
+    m_resourceAgent->didCreateWebSocket(identifier, requestURL);
+    UNUSED_PARAM(documentURL);
+#endif
 }
 
 void InspectorController::willSendWebSocketHandshakeRequest(unsigned long identifier, const WebSocketHandshakeRequest& request)
 {
-    if (m_resourceAgent)
-        m_resourceAgent->willSendWebSocketHandshakeRequest(identifier, request);
-
+#if LEGACY_RESOURCE_TRACKING_ENABLED
     RefPtr<InspectorResource> resource = getTrackedResource(identifier);
     if (!resource)
         return;
@@ -1530,13 +1579,14 @@ void InspectorController::willSendWebSocketHandshakeRequest(unsigned long identi
     resource->updateWebSocketRequest(request);
     if (m_frontend)
         resource->updateScriptObject(m_frontend.get());
+#else
+    m_resourceAgent->willSendWebSocketHandshakeRequest(identifier, request);
+#endif
 }
 
 void InspectorController::didReceiveWebSocketHandshakeResponse(unsigned long identifier, const WebSocketHandshakeResponse& response)
 {
-    if (m_resourceAgent)
-        m_resourceAgent->didReceiveWebSocketHandshakeResponse(identifier, response);
-
+#if LEGACY_RESOURCE_TRACKING_ENABLED
     RefPtr<InspectorResource> resource = getTrackedResource(identifier);
     if (!resource)
         return;
@@ -1546,13 +1596,14 @@ void InspectorController::didReceiveWebSocketHandshakeResponse(unsigned long ide
     resource->updateWebSocketResponse(response);
     if (m_frontend)
         resource->updateScriptObject(m_frontend.get());
+#else
+    m_resourceAgent->didReceiveWebSocketHandshakeResponse(identifier, response);
+#endif
 }
 
 void InspectorController::didCloseWebSocket(unsigned long identifier)
 {
-    if (m_resourceAgent)
-        m_resourceAgent->didCloseWebSocket(identifier);
-
+#if LEGACY_RESOURCE_TRACKING_ENABLED
     RefPtr<InspectorResource> resource = getTrackedResource(identifier);
     if (!resource)
         return;
@@ -1560,6 +1611,9 @@ void InspectorController::didCloseWebSocket(unsigned long identifier)
     resource->endTiming(0);
     if (m_frontend)
         resource->updateScriptObject(m_frontend.get());
+#else
+    m_resourceAgent->didCloseWebSocket(identifier);
+#endif
 }
 #endif // ENABLE(WEB_SOCKETS)
 
@@ -1773,9 +1827,7 @@ void InspectorController::didEvaluateForTestInFrontend(long callId, const String
 String InspectorController::breakpointsSettingKey()
 {
     DEFINE_STATIC_LOCAL(String, keyPrefix, ("breakpoints:"));
-    if (!m_mainResource)
-        return "";
-    return keyPrefix + InspectorDebuggerAgent::md5Base16(m_mainResource->requestURL());
+    return keyPrefix + InspectorDebuggerAgent::md5Base16(m_inspectedPage->mainFrame()->loader()->url().string());
 }
 
 PassRefPtr<InspectorValue> InspectorController::loadBreakpoints()
@@ -2107,55 +2159,18 @@ void InspectorController::setInspectorExtensionAPI(const String& source)
 
 void InspectorController::getResourceContent(unsigned long identifier, bool encode, String* content)
 {
+#if LEGACY_RESOURCE_TRACKING_ENABLED
     RefPtr<InspectorResource> resource = m_resources.get(identifier);
     if (!resource) {
         *content = String();
         return;
     }
     *content = encode ? resource->sourceBytes() : resource->sourceString();
-}
-
-bool InspectorController::resourceContentForURL(const KURL& url, Document* frameDocument, String* result)
-{
-    if (!frameDocument)
-        return false;
-
-    String textEncodingName;
-    RefPtr<SharedBuffer> buffer;
-    if (equalIgnoringFragmentIdentifier(url, frameDocument->frame()->loader()->documentLoader()->requestURL())) {
-        textEncodingName = frameDocument->inputEncoding();
-        buffer = frameDocument->frame()->loader()->provisionalDocumentLoader()->mainResourceData();
-    } else {
-        const String& urlString = url.string();
-        CachedResource* cachedResource = frameDocument->cachedResourceLoader()->cachedResource(urlString);
-        if (!cachedResource)
-            cachedResource = cache()->resourceForURL(urlString);
-
-        ASSERT(cachedResource); // FIXME(apavlov): This might be too aggressive.
-
-        bool isUnpurgeable = true;
-        if (cachedResource->isPurgeable()) {
-            // If the resource is purgeable then make it unpurgeable to get
-            // its data. This might fail, in which case we return an
-            // empty String.
-            if (!cachedResource->makePurgeable(false))
-                isUnpurgeable = false;
-        }
-        if (isUnpurgeable) {
-            textEncodingName = cachedResource->encoding();
-            buffer = cachedResource->data();
-        }
-    }
-
-    if (buffer) {
-        TextEncoding encoding(textEncodingName);
-        if (!encoding.isValid())
-            encoding = WindowsLatin1Encoding();
-        *result = encoding.decode(buffer->data(), buffer->size());
-        return true;
-    }
-
-    return false;
+#else
+    UNUSED_PARAM(identifier);
+    UNUSED_PARAM(encode);
+    UNUSED_PARAM(content);
+#endif
 }
 
 void InspectorController::reloadPage()
diff --git a/WebCore/inspector/InspectorController.h b/WebCore/inspector/InspectorController.h
index 18db07f..917968c 100644
--- a/WebCore/inspector/InspectorController.h
+++ b/WebCore/inspector/InspectorController.h
@@ -67,7 +67,6 @@ class InspectorFrontend;
 class InspectorFrontendClient;
 class InspectorObject;
 class InspectorProfilerAgent;
-class InspectorResource;
 class InspectorResourceAgent;
 class InspectorState;
 class InspectorStorageAgent;
@@ -87,6 +86,12 @@ class SharedBuffer;
 class Storage;
 class StorageArea;
 
+#define LEGACY_RESOURCE_TRACKING_ENABLED 1
+
+#if LEGACY_RESOURCE_TRACKING_ENABLED
+class InspectorResource;
+#endif
+
 #if ENABLE(OFFLINE_WEB_APPLICATIONS)
 class InspectorApplicationCacheAgent;
 #endif
@@ -98,8 +103,10 @@ class WebSocketHandshakeResponse;
 
 class InspectorController : public Noncopyable {
 public:
+#if LEGACY_RESOURCE_TRACKING_ENABLED
     typedef HashMap<unsigned long, RefPtr<InspectorResource> > ResourcesMap;
     typedef HashMap<RefPtr<Frame>, ResourcesMap*> FrameResourcesMap;
+#endif
     typedef HashMap<int, RefPtr<InspectorDatabaseResource> > DatabaseResourcesMap;
     typedef HashMap<int, RefPtr<InspectorDOMStorageResource> > DOMStorageResourcesMap;
 
@@ -169,9 +176,11 @@ public:
     void resourceRetrievedByXMLHttpRequest(unsigned long identifier, const String& sourceString, const String& url, const String& sendURL, unsigned sendLineNumber);
     void scriptImported(unsigned long identifier, const String& sourceString);
 
-    void setResourceTrackingEnabled(bool enabled);
     void setResourceTrackingEnabled(bool enabled, bool always, bool* newState);
+#if LEGACY_RESOURCE_TRACKING_ENABLED
+    void setResourceTrackingEnabled(bool enabled);
     bool resourceTrackingEnabled() const;
+#endif
 
     void ensureSettingsLoaded();
 
@@ -214,9 +223,10 @@ public:
     void didCloseWebSocket(unsigned long identifier);
 #endif
 
+#if LEGACY_RESOURCE_TRACKING_ENABLED
     const ResourcesMap& resources() const { return m_resources; }
-    InspectorResource* resourceForURL(const String& url);
-    bool resourceContentForURL(const KURL& url, Document* loaderDocument, String* result);
+#endif
+
     bool hasFrontend() const { return m_frontend; }
 
     void drawNodeHighlight(GraphicsContext&) const;
@@ -316,13 +326,14 @@ private:
 
     void addConsoleMessage(PassOwnPtr<ConsoleMessage>);
 
+#if LEGACY_RESOURCE_TRACKING_ENABLED
     void addResource(InspectorResource*);
     void removeResource(InspectorResource*);
     InspectorResource* getTrackedResource(unsigned long identifier);
-    void getResourceContent(unsigned long identifier, bool encode, String* content);
-
     void pruneResources(ResourcesMap*, DocumentLoader* loaderToKeep = 0);
     void removeAllResources(ResourcesMap* map) { pruneResources(map); }
+#endif
+    void getResourceContent(unsigned long identifier, bool encode, String* content);
 
     bool isMainResourceLoader(DocumentLoader* loader, const KURL& requestUrl);
 
@@ -341,7 +352,6 @@ private:
     bool m_openingFrontend;
     OwnPtr<InspectorFrontend> m_frontend;
     RefPtr<InspectorDOMAgent> m_domAgent;
-    RefPtr<InspectorResourceAgent> m_resourceAgent;
     RefPtr<InspectorStorageAgent> m_storageAgent;
     OwnPtr<InspectorCSSStore> m_cssStore;
     OwnPtr<InspectorTimelineAgent> m_timelineAgent;
@@ -350,12 +360,15 @@ private:
 #if ENABLE(OFFLINE_WEB_APPLICATIONS)
     OwnPtr<InspectorApplicationCacheAgent> m_applicationCacheAgent;
 #endif
-
     RefPtr<Node> m_nodeToFocus;
+#if LEGACY_RESOURCE_TRACKING_ENABLED
     RefPtr<InspectorResource> m_mainResource;
     ResourcesMap m_resources;
     HashSet<String> m_knownResources;
     FrameResourcesMap m_frameResources;
+#endif
+    RefPtr<InspectorResourceAgent> m_resourceAgent;
+    unsigned long m_mainResourceIdentifier;
     double m_loadEventTime;
     double m_domContentEventTime;
     Vector<OwnPtr<ConsoleMessage> > m_consoleMessages;
diff --git a/WebCore/inspector/InspectorResource.cpp b/WebCore/inspector/InspectorResource.cpp
index 05b1bff..9b3f95d 100644
--- a/WebCore/inspector/InspectorResource.cpp
+++ b/WebCore/inspector/InspectorResource.cpp
@@ -302,6 +302,7 @@ void InspectorResource::updateScriptObject(InspectorFrontend* frontend)
 
     if (m_changes.hasChange(CompletionChange)) {
         jsonObject->setBoolean("failed", m_failed);
+        jsonObject->setString("localizedFailDescription", m_localizedFailDescription);
         jsonObject->setBoolean("finished", m_finished);
         jsonObject->setBoolean("didCompletionChange", true);
     }
@@ -436,9 +437,10 @@ void InspectorResource::endTiming(double actualEndTime)
     m_changes.set(CompletionChange);
 }
 
-void InspectorResource::markFailed()
+void InspectorResource::markFailed(const String& localizedDescription)
 {
     m_failed = true;
+    m_localizedFailDescription = localizedDescription;
     m_changes.set(CompletionChange);
 }
 
diff --git a/WebCore/inspector/InspectorResource.h b/WebCore/inspector/InspectorResource.h
index aa6001f..aa4c3b1 100644
--- a/WebCore/inspector/InspectorResource.h
+++ b/WebCore/inspector/InspectorResource.h
@@ -116,7 +116,7 @@ namespace WebCore {
         void startTiming();
         void endTiming(double actualEndTime);
 
-        void markFailed();
+        void markFailed(const String& localizedDescription);
         void addLength(int lengthReceived);
 
     private:
@@ -175,6 +175,7 @@ namespace WebCore {
         bool m_cached;
         bool m_finished;
         bool m_failed;
+        String m_localizedFailDescription;
         int m_length;
         int m_responseStatusCode;
         String m_responseStatusText;
diff --git a/WebCore/inspector/InspectorResourceAgent.cpp b/WebCore/inspector/InspectorResourceAgent.cpp
index 9f8062f..2e965b6 100644
--- a/WebCore/inspector/InspectorResourceAgent.cpp
+++ b/WebCore/inspector/InspectorResourceAgent.cpp
@@ -263,10 +263,8 @@ static void populateObjectWithFrameResources(Frame* frame, PassRefPtr<InspectorO
     CachedResourceLoader::DocumentResourceMap::const_iterator end = allResources.end();
     for (CachedResourceLoader::DocumentResourceMap::const_iterator it = allResources.begin(); it != end; ++it) {
         CachedResource* cachedResource = it->second.get();
-        if (cachedResource) {
-            RefPtr<InspectorObject> cachedResourceObject = buildObjectForCachedResource(frame->loader()->documentLoader(), *cachedResource);
-            subresources->pushValue(cachedResourceObject);
-        }
+        RefPtr<InspectorObject> cachedResourceObject = buildObjectForCachedResource(frame->loader()->documentLoader(), *cachedResource);
+        subresources->pushValue(cachedResourceObject);
     }
 }
 
diff --git a/WebCore/inspector/front-end/CookieItemsView.js b/WebCore/inspector/front-end/CookieItemsView.js
index 4e250c4..b2da875 100644
--- a/WebCore/inspector/front-end/CookieItemsView.js
+++ b/WebCore/inspector/front-end/CookieItemsView.js
@@ -208,7 +208,6 @@ WebInspector.CookieItemsView.prototype = {
             this._filterCookiesForDomain(allCookies);
         else
             this._cookies = allCookies;
-
         if (!this._cookies.length) {
             // Nothing to show.
             this._emptyMsgElement.removeStyleClass("hidden");
@@ -255,7 +254,7 @@ WebInspector.CookieItemsView.prototype = {
             if (url && url.host == this._cookieDomain)
                 resourceURLsForDocumentURL.push(resource.url);
         }
-        WebInspector.forAllResources(populateResourcesForDocuments);
+        WebInspector.forAllResources(populateResourcesForDocuments.bind(this));
 
         for (var i = 0; i < allCookies.length; ++i) {
             var pushed = false;
diff --git a/WebCore/inspector/front-end/Resource.js b/WebCore/inspector/front-end/Resource.js
index 2df7b73..1a2ce96 100644
--- a/WebCore/inspector/front-end/Resource.js
+++ b/WebCore/inspector/front-end/Resource.js
@@ -565,6 +565,9 @@ WebInspector.Resource.prototype = {
          || this.type === WebInspector.Resource.Type.WebSocket)
             return true;
 
+        if (!this.mimeType)
+            return true; // Might be not known for cached resources with null responses.
+
         if (this.mimeType in WebInspector.MIMETypes)
             return this.type in WebInspector.MIMETypes[this.mimeType];
 
@@ -584,7 +587,7 @@ WebInspector.Resource.prototype = {
             case WebInspector.Warnings.IncorrectMIMEType.id:
                 if (!this._mimeTypeIsConsistentWithType())
                     msg = new WebInspector.ConsoleMessage(WebInspector.ConsoleMessage.MessageSource.Other,
-                        WebInspector.ConsoleMessage.MessageType.Log, 
+                        WebInspector.ConsoleMessage.MessageType.Log,
                         WebInspector.ConsoleMessage.MessageLevel.Warning,
                         -1,
                         this.url,
diff --git a/WebCore/inspector/front-end/ResourceManager.js b/WebCore/inspector/front-end/ResourceManager.js
index b181958..43a655e 100644
--- a/WebCore/inspector/front-end/ResourceManager.js
+++ b/WebCore/inspector/front-end/ResourceManager.js
@@ -154,6 +154,9 @@ WebInspector.ResourceManager.prototype = {
 
     _updateResourceWithResponse: function(resource, response)
     {
+        if (resource.isNull)
+            return;
+
         resource.mimeType = response.mimeType;
         resource.expectedContentLength = response.expectedContentLength;
         resource.textEncodingName = response.textEncodingName;
@@ -210,6 +213,7 @@ WebInspector.ResourceManager.prototype = {
             return;
 
         resource.failed = true;
+        resource.localizedFailDescription = localizedDescription;
         resource.finished = true;
         resource.endTime = time;
 
diff --git a/WebCore/inspector/front-end/inspector.js b/WebCore/inspector/front-end/inspector.js
index 85ca3f6..7e777f2 100644
--- a/WebCore/inspector/front-end/inspector.js
+++ b/WebCore/inspector/front-end/inspector.js
@@ -466,8 +466,8 @@ var WebInspector = {
         if (Preferences.networkPanelEnabled)
             WebInspector.resourceManager.forAllResources(callback);
         else {
-            for (var id in WebInspector.panels.resources.resources) {
-                if (callback(WebInspector.panels.resources.resources[id]))
+            for (var id in this.resources) {
+                if (callback(this.resources[id]))
                     return;
             }
         }
@@ -1318,6 +1318,7 @@ WebInspector.updateResource = function(payload)
 
     if (payload.didCompletionChange) {
         resource.failed = payload.failed;
+        resource.localizedFailDescription = payload.localizedFailDescription;
         resource.finished = payload.finished;
         if (this.panels.audits)
             this.panels.audits.resourceFinished(resource);

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list