https://bugs.webkit.org/show_bug.cgi?id=88436
Reviewed by Brady Eidson.
Test: http/tests/multipart/multipart-replace-non-html-content.php
* loader/DocumentLoader.cpp:
(WebCore::DocumentLoader::commitData): We should only send receivedFirstData() once per main resource load,
rather than multiple times in a multipart load.
(WebCore::DocumentLoader::setupForReplaceByMIMEType): m_gotFirstByte isn't set to true until data is
actually committed, and multipart data is often not committed until the part is finished. Check
whether the SharedBuffer is non-null instead.
* testing/js/WebCoreTestSupport.cpp:
(WebCoreTestSupport::resetInternalsObject): The JSInternals object my have already been cleared if the window shell
was cleared as part of creation of a new Document. Check it before using it.
LayoutTests: Test for https://bugs.webkit.org/show_bug.cgi?id=88436.
Reviewed by Brady Eidson.
* http/tests/multipart/multipart-replace-non-html-content-expected.txt: Added.
* http/tests/multipart/multipart-replace-non-html-content.php: Added.
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@121813
268f45cc-cd09-0410-ab3c-
d52691b4dbfc
+2012-07-03 Nate Chapin <japhet@chromium.org>
+
+ Test for https://bugs.webkit.org/show_bug.cgi?id=88436.
+
+ Reviewed by Brady Eidson.
+
+ * http/tests/multipart/multipart-replace-non-html-content-expected.txt: Added.
+ * http/tests/multipart/multipart-replace-non-html-content.php: Added.
+
2012-07-03 Emil A Eklund <eae@chromium.org>
Unreviewed chromium mac rebaselines.
--- /dev/null
+This text should only appear once 10
+
+
--- /dev/null
+<?php
+header('Content-type: multipart/x-mixed-replace; boundary=boundary');
+header('Connection: keep-alive');
+echo "--boundary\r\n";
+echo "Content-Type: text/html\r\n\r\n";
+echo str_pad('', 5000);
+?>
+
+<script>
+if (window.layoutTestController)
+ layoutTestController.dumpAsText();
+</script>
+
+<?php
+for ($i = 0; $i <= 10; $i++) {
+ echo "--boundary\r\n";
+ echo "Content-Type: text/plain\r\n\r\n";
+ echo "This text should only appear once ";
+ echo $i;
+ echo str_pad('', 5000);
+ echo "\r\n\r\n";
+ flush();
+ usleep(100000);
+ $i++;
+}
+?>
+2012-07-03 Nate Chapin <japhet@chromium.org>
+
+ REGRESSION (r115654): Sometimes does not replace content for multipart/x-mixed-replace
+ https://bugs.webkit.org/show_bug.cgi?id=88436
+
+ Reviewed by Brady Eidson.
+
+ Test: http/tests/multipart/multipart-replace-non-html-content.php
+
+ * loader/DocumentLoader.cpp:
+ (WebCore::DocumentLoader::commitData): We should only send receivedFirstData() once per main resource load,
+ rather than multiple times in a multipart load.
+ (WebCore::DocumentLoader::setupForReplaceByMIMEType): m_gotFirstByte isn't set to true until data is
+ actually committed, and multipart data is often not committed until the part is finished. Check
+ whether the SharedBuffer is non-null instead.
+ * testing/js/WebCoreTestSupport.cpp:
+ (WebCoreTestSupport::resetInternalsObject): The JSInternals object my have already been cleared if the window shell
+ was cleared as part of creation of a new Document. Check it before using it.
+
2012-07-03 Raymond Toy <rtoy@google.com>
Add AudioFIFO class and simplify AudioPullFIFO
m_frame->document()->setBaseURLOverride(m_archive->mainResource()->url());
#endif
- frameLoader()->receivedFirstData();
+ if (!frameLoader()->isReplacing())
+ frameLoader()->receivedFirstData();
bool userChosen = true;
String encoding = overrideEncoding();
void DocumentLoader::setupForReplaceByMIMEType(const String& newMIMEType)
{
- if (!m_gotFirstByte)
+ if (!mainResourceData())
return;
String oldMIMEType = m_response.mimeType();
ExecState* exec = toJS(context);
JSLockHolder lock(exec);
JSDOMGlobalObject* globalObject = jsCast<JSDOMGlobalObject*>(exec->lexicalGlobalObject());
- Internals * internals = toInternals(globalObject->getDirect(exec->globalData(), Identifier(exec, Internals::internalsId)));
- if (internals) {
+ JSValue internalsJS = globalObject->getDirect(exec->globalData(), Identifier(exec, Internals::internalsId));
+ if (internalsJS.isNull() || internalsJS.isEmpty())
+ return;
+ if (Internals* internals = toInternals(internalsJS)) {
ScriptExecutionContext* scriptContext = globalObject->scriptExecutionContext();
if (scriptContext->isDocument())
internals->reset(static_cast<Document*>(scriptContext));