Diff
Modified: trunk/LayoutTests/ChangeLog (108496 => 108497)
--- trunk/LayoutTests/ChangeLog 2012-02-22 15:05:19 UTC (rev 108496)
+++ trunk/LayoutTests/ChangeLog 2012-02-22 15:07:58 UTC (rev 108497)
@@ -1,3 +1,17 @@
+2012-02-22 Vsevolod Vlasov <[email protected]>
+
+ Web Inspector: retrieving content for some XHR requests crashes inspected page renderer
+ https://bugs.webkit.org/show_bug.cgi?id=79026
+
+ Reviewed by Pavel Feldman.
+
+ * http/tests/inspector/network/network-cyrillic-xhr-expected.txt: Added.
+ * http/tests/inspector/network/network-cyrillic-xhr.html: Added.
+ * http/tests/inspector/network/network-empty-xhr-expected.txt: Added.
+ * http/tests/inspector/network/network-empty-xhr.html: Added.
+ * http/tests/inspector/network/resources/cyrillic.html: Added.
+ * http/tests/inspector/network/resources/empty.html: Added.
+
2012-02-21 Vsevolod Vlasov <[email protected]>
Web Inspector: [InspectorIndexedDB] Show IndexedDB views on selection IndexedDB elements in resources panel.
Added: trunk/LayoutTests/http/tests/inspector/network/network-cyrillic-xhr-expected.txt (0 => 108497)
--- trunk/LayoutTests/http/tests/inspector/network/network-cyrillic-xhr-expected.txt (rev 0)
+++ trunk/LayoutTests/http/tests/inspector/network/network-cyrillic-xhr-expected.txt 2012-02-22 15:07:58 UTC (rev 108497)
@@ -0,0 +1,13 @@
+CONSOLE MESSAGE: line 18: Done.
+Tests cyrillic xhr content is correctly loaded in inspector.
+
+Bug 79026
+http://127.0.0.1:8000/inspector/network/resources/cyrillic.html
+resource.content: The following line contains a word "success" written with cyrillic letters.
+SUССЕSS
+
+http://127.0.0.1:8000/inspector/network/resources/cyrillic.html
+resource.content: The following line contains a word "success" written with cyrillic letters.
+SUССЕSS
+
+
Property changes on: trunk/LayoutTests/http/tests/inspector/network/network-cyrillic-xhr-expected.txt
___________________________________________________________________
Added: svn:eol-style
Added: trunk/LayoutTests/http/tests/inspector/network/network-cyrillic-xhr.html (0 => 108497)
--- trunk/LayoutTests/http/tests/inspector/network/network-cyrillic-xhr.html (rev 0)
+++ trunk/LayoutTests/http/tests/inspector/network/network-cyrillic-xhr.html 2012-02-22 15:07:58 UTC (rev 108497)
@@ -0,0 +1,72 @@
+<html>
+<head>
+<script src=""
+<script src=""
+<script>
+function loadData()
+{
+ doXHR("GET", "resources/cyrillic.html", false, xhrLoaded1);
+}
+
+function xhrLoaded1()
+{
+ doXHR("GET", "resources/cyrillic.html", true, allXHRsLoaded);
+}
+
+function allXHRsLoaded()
+{
+ console.log("Done.");
+}
+
+function test()
+{
+ // Since this test could be run together with other inspector backend cache
+ // tests, we need to reset size limits to default ones.
+ InspectorTest.resetInspectorResourcesData(step1);
+
+ function dumpResource(resource, callback)
+ {
+ if (!resource)
+ return callback();
+ InspectorTest.addResult(resource.url);
+
+ function contentLoaded()
+ {
+ InspectorTest.addResult("resource.content: " + resource.content);
+ callback();
+ }
+
+ resource.requestContent(contentLoaded);
+ }
+
+ function step1()
+ {
+ InspectorTest.addConsoleSniffer(step2);
+ InspectorTest.evaluateInPage("loadData()");
+ }
+
+ function step2()
+ {
+ var resource = WebInspector.panels.network.resources[WebInspector.panels.network.resources.length - 2];
+ dumpResource(resource, step3);
+ }
+
+ function step3()
+ {
+ var resource = WebInspector.panels.network.resources[WebInspector.panels.network.resources.length - 1];
+ dumpResource(resource, step4);
+ }
+
+ function step4()
+ {
+ InspectorTest.completeTest();
+ }
+}
+</script>
+</head>
+<body _onload_="runTest()">
+<p> Tests cyrillic xhr content is correctly loaded in inspector.</p>
+<a href="" 79026</a>
+</body>
+</html>
+
Property changes on: trunk/LayoutTests/http/tests/inspector/network/network-cyrillic-xhr.html
___________________________________________________________________
Added: svn:eol-style
Added: trunk/LayoutTests/http/tests/inspector/network/network-empty-xhr-expected.txt (0 => 108497)
--- trunk/LayoutTests/http/tests/inspector/network/network-empty-xhr-expected.txt (rev 0)
+++ trunk/LayoutTests/http/tests/inspector/network/network-empty-xhr-expected.txt 2012-02-22 15:07:58 UTC (rev 108497)
@@ -0,0 +1,9 @@
+CONSOLE MESSAGE: line 18: Done.
+Tests empty xhr content is correctly loaded in inspector.
+
+Bug 79026
+http://127.0.0.1:8000/inspector/network/resources/empty.html
+resource.content:
+http://127.0.0.1:8000/inspector/network/resources/empty.html
+resource.content:
+
Property changes on: trunk/LayoutTests/http/tests/inspector/network/network-empty-xhr-expected.txt
___________________________________________________________________
Added: svn:eol-style
Added: trunk/LayoutTests/http/tests/inspector/network/network-empty-xhr.html (0 => 108497)
--- trunk/LayoutTests/http/tests/inspector/network/network-empty-xhr.html (rev 0)
+++ trunk/LayoutTests/http/tests/inspector/network/network-empty-xhr.html 2012-02-22 15:07:58 UTC (rev 108497)
@@ -0,0 +1,72 @@
+<html>
+<head>
+<script src=""
+<script src=""
+<script>
+function loadData()
+{
+ doXHR("GET", "resources/empty.html", false, xhrLoaded1);
+}
+
+function xhrLoaded1()
+{
+ doXHR("GET", "resources/empty.html", true, allXHRsLoaded);
+}
+
+function allXHRsLoaded()
+{
+ console.log("Done.");
+}
+
+function test()
+{
+ // Since this test could be run together with other inspector backend cache
+ // tests, we need to reset size limits to default ones.
+ InspectorTest.resetInspectorResourcesData(step1);
+
+ function dumpResource(resource, callback)
+ {
+ if (!resource)
+ return callback();
+ InspectorTest.addResult(resource.url);
+
+ function contentLoaded()
+ {
+ InspectorTest.addResult("resource.content: " + resource.content);
+ callback();
+ }
+
+ resource.requestContent(contentLoaded);
+ }
+
+ function step1()
+ {
+ InspectorTest.addConsoleSniffer(step2);
+ InspectorTest.evaluateInPage("loadData()");
+ }
+
+ function step2()
+ {
+ var resource = WebInspector.panels.network.resources[WebInspector.panels.network.resources.length - 2];
+ dumpResource(resource, step3);
+ }
+
+ function step3()
+ {
+ var resource = WebInspector.panels.network.resources[WebInspector.panels.network.resources.length - 1];
+ dumpResource(resource, step4);
+ }
+
+ function step4()
+ {
+ InspectorTest.completeTest();
+ }
+}
+</script>
+</head>
+<body _onload_="runTest()">
+<p> Tests empty xhr content is correctly loaded in inspector.</p>
+<a href="" 79026</a>
+</body>
+</html>
+
Property changes on: trunk/LayoutTests/http/tests/inspector/network/network-empty-xhr.html
___________________________________________________________________
Added: svn:eol-style
Added: trunk/LayoutTests/http/tests/inspector/network/resources/cyrillic.html (0 => 108497)
--- trunk/LayoutTests/http/tests/inspector/network/resources/cyrillic.html (rev 0)
+++ trunk/LayoutTests/http/tests/inspector/network/resources/cyrillic.html 2012-02-22 15:07:58 UTC (rev 108497)
@@ -0,0 +1,2 @@
+The following line contains a word "success" written with cyrillic letters.
+SUССЕSS
Property changes on: trunk/LayoutTests/http/tests/inspector/network/resources/cyrillic.html
___________________________________________________________________
Added: svn:eol-style
Property changes: trunk/LayoutTests/http/tests/inspector/network/resources/empty.html
Added: svn:eol-style
Modified: trunk/Source/WebCore/ChangeLog (108496 => 108497)
--- trunk/Source/WebCore/ChangeLog 2012-02-22 15:05:19 UTC (rev 108496)
+++ trunk/Source/WebCore/ChangeLog 2012-02-22 15:07:58 UTC (rev 108497)
@@ -1,3 +1,29 @@
+2012-02-22 Vsevolod Vlasov <[email protected]>
+
+ Web Inspector: retrieving content for some XHR requests crashes inspected page renderer
+ https://bugs.webkit.org/show_bug.cgi?id=79026
+
+ Reviewed by Pavel Feldman.
+
+ Fixed loading empty xhr content and xhr content decoding that was
+ broken in r107672.
+
+ Tests: http/tests/inspector/network/network-cyrillic-xhr.html
+ http/tests/inspector/network/network-empty-xhr.html
+
+ * inspector/InspectorPageAgent.cpp:
+ (WebCore):
+ (WebCore::InspectorPageAgent::createDecoder):
+ (WebCore::InspectorPageAgent::cachedResourceContent):
+ * inspector/InspectorPageAgent.h:
+ (WebCore):
+ * inspector/NetworkResourcesData.cpp:
+ (WebCore::NetworkResourcesData::ResourceData::decodeDataToContent):
+ (WebCore::NetworkResourcesData::responseReceived):
+ * inspector/NetworkResourcesData.h:
+ (WebCore::NetworkResourcesData::ResourceData::decoder):
+ (WebCore::NetworkResourcesData::ResourceData::setDecoder):
+
2012-02-22 Peter Rybin <[email protected]>
Web Inspector: CodeGeneratorInspector.py: remove neural-net-style constructions
Modified: trunk/Source/WebCore/inspector/InspectorPageAgent.cpp (108496 => 108497)
--- trunk/Source/WebCore/inspector/InspectorPageAgent.cpp 2012-02-22 15:05:19 UTC (rev 108496)
+++ trunk/Source/WebCore/inspector/InspectorPageAgent.cpp 2012-02-22 15:07:58 UTC (rev 108497)
@@ -44,6 +44,7 @@
#include "ContentSearchUtils.h"
#include "Cookie.h"
#include "CookieJar.h"
+#include "DOMImplementation.h"
#include "DOMNodeHighlighter.h"
#include "DOMPatchSupport.h"
#include "Document.h"
@@ -67,6 +68,7 @@
#include "SecurityOrigin.h"
#include "SharedBuffer.h"
#include "TextEncoding.h"
+#include "TextResourceDecoder.h"
#include "UserGestureIndicator.h"
#include <wtf/CurrentTime.h>
@@ -129,6 +131,23 @@
return type == InspectorPageAgent::StylesheetResource || type == InspectorPageAgent::ScriptResource || type == InspectorPageAgent::XHRResource;
}
+// static
+PassRefPtr<TextResourceDecoder> InspectorPageAgent::createDecoder(const String& mimeType, const String& textEncodingName)
+{
+ RefPtr<TextResourceDecoder> decoder;
+ if (!textEncodingName.isEmpty())
+ decoder = TextResourceDecoder::create("text/plain", textEncodingName);
+ else if (mimeType == "text/plain")
+ decoder = TextResourceDecoder::create("text/plain", "ISO-8859-1");
+ else if (mimeType == "text/html")
+ decoder = TextResourceDecoder::create("text/html", "UTF-8");
+ else if (DOMImplementation::isXMLMIMEType(mimeType)) {
+ decoder = TextResourceDecoder::create("application/xml");
+ decoder->useLenientXMLDecoding();
+ }
+ return decoder;
+}
+
bool InspectorPageAgent::cachedResourceContent(CachedResource* cachedResource, String* result, bool* base64Encoded)
{
bool hasZeroSize;
@@ -147,8 +166,12 @@
return true;
}
+ if (hasZeroSize) {
+ *result = "";
+ return true;
+ }
+
if (cachedResource) {
- SharedBuffer* buffer = cachedResource->data();
switch (cachedResource->type()) {
case CachedResource::CSSStyleSheet:
*result = static_cast<CachedCSSStyleSheet*>(cachedResource)->sheetText();
@@ -156,14 +179,15 @@
case CachedResource::Script:
*result = static_cast<CachedScript*>(cachedResource)->script();
return true;
- case CachedResource::RawResource:
- *result = String(buffer->data(), buffer->size());
+ case CachedResource::RawResource: {
+ SharedBuffer* buffer = cachedResource->data();
+ RefPtr<TextResourceDecoder> decoder = InspectorPageAgent::createDecoder(cachedResource->response().mimeType(), cachedResource->response().textEncodingName());
+ String content = decoder->decode(buffer->data(), buffer->size());
+ content += decoder->flush();
+ *result = content;
return true;
+ }
default:
- if (hasZeroSize) {
- *result = "";
- return true;
- }
return decodeSharedBuffer(cachedResource->data(), cachedResource->encoding(), result);
}
}
Modified: trunk/Source/WebCore/inspector/InspectorPageAgent.h (108496 => 108497)
--- trunk/Source/WebCore/inspector/InspectorPageAgent.h 2012-02-22 15:05:19 UTC (rev 108496)
+++ trunk/Source/WebCore/inspector/InspectorPageAgent.h 2012-02-22 15:07:58 UTC (rev 108497)
@@ -58,6 +58,7 @@
class Page;
class RegularExpression;
class SharedBuffer;
+class TextResourceDecoder;
typedef String ErrorString;
@@ -77,6 +78,7 @@
static PassOwnPtr<InspectorPageAgent> create(InstrumentingAgents*, Page*, InspectorState*, InjectedScriptManager*, InspectorClient*);
+ static PassRefPtr<TextResourceDecoder> createDecoder(const String& mimeType, const String& textEncodingName);
static bool cachedResourceContent(CachedResource*, String* result, bool* base64Encoded);
static bool sharedBufferContent(PassRefPtr<SharedBuffer>, const String& textEncodingName, bool withBase64Encode, String* result);
static void resourceContent(ErrorString*, Frame*, const KURL&, String* result, bool* base64Encoded);
Modified: trunk/Source/WebCore/inspector/NetworkResourcesData.cpp (108496 => 108497)
--- trunk/Source/WebCore/inspector/NetworkResourcesData.cpp 2012-02-22 15:05:19 UTC (rev 108496)
+++ trunk/Source/WebCore/inspector/NetworkResourcesData.cpp 2012-02-22 15:07:58 UTC (rev 108497)
@@ -29,7 +29,6 @@
#include "config.h"
#include "NetworkResourcesData.h"
-#include "DOMImplementation.h"
#include "SharedBuffer.h"
#include "TextResourceDecoder.h"
@@ -80,20 +79,6 @@
return result;
}
-void NetworkResourcesData::ResourceData::createDecoder(const String& mimeType, const String& textEncodingName)
-{
- if (!textEncodingName.isEmpty())
- m_decoder = TextResourceDecoder::create("text/plain", textEncodingName);
- else if (mimeType == "text/plain")
- m_decoder = TextResourceDecoder::create("text/plain", "ISO-8859-1");
- else if (mimeType == "text/html")
- m_decoder = TextResourceDecoder::create("text/html", "UTF-8");
- else if (DOMImplementation::isXMLMIMEType(mimeType)) {
- m_decoder = TextResourceDecoder::create("application/xml");
- m_decoder->useLenientXMLDecoding();
- }
-}
-
int NetworkResourcesData::ResourceData::dataLength() const
{
return m_dataBuffer ? m_dataBuffer->size() : 0;
@@ -113,6 +98,7 @@
ASSERT(!hasContent());
int dataLength = m_dataBuffer->size();
m_content = m_decoder->decode(m_dataBuffer->data(), m_dataBuffer->size());
+ m_content += m_decoder->flush();
m_dataBuffer = nullptr;
return 2 * m_content.length() - dataLength;
}
@@ -143,7 +129,7 @@
return;
resourceData->setFrameId(frameId);
resourceData->setUrl(response.url());
- resourceData->createDecoder(response.mimeType(), response.textEncodingName());
+ resourceData->setDecoder(InspectorPageAgent::createDecoder(response.mimeType(), response.textEncodingName()));
}
void NetworkResourcesData::setResourceType(const String& requestId, InspectorPageAgent::ResourceType type)
Modified: trunk/Source/WebCore/inspector/NetworkResourcesData.h (108496 => 108497)
--- trunk/Source/WebCore/inspector/NetworkResourcesData.h 2012-02-22 15:05:19 UTC (rev 108496)
+++ trunk/Source/WebCore/inspector/NetworkResourcesData.h 2012-02-22 15:07:58 UTC (rev 108497)
@@ -31,6 +31,7 @@
#include "CachedResourceHandle.h"
#include "InspectorPageAgent.h"
+#include "TextResourceDecoder.h"
#include <wtf/Deque.h>
#include <wtf/HashMap.h>
@@ -75,8 +76,8 @@
String textEncodingName() const { return m_textEncodingName; }
void setTextEncodingName(const String& textEncodingName) { m_textEncodingName = textEncodingName; }
- TextResourceDecoder* decoder() const { return m_decoder.get(); }
- void createDecoder(const String& mimeType, const String& textEncodingName);
+ PassRefPtr<TextResourceDecoder> decoder() const { return m_decoder; }
+ void setDecoder(PassRefPtr<TextResourceDecoder> decoder) { m_decoder = decoder; }
PassRefPtr<SharedBuffer> buffer() const { return m_buffer; }
void setBuffer(PassRefPtr<SharedBuffer> buffer) { m_buffer = buffer; }