summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--LayoutTests/fast/dom/HTMLLinkElement/link-and-subresource-test-expected.txt10
-rw-r--r--LayoutTests/fast/dom/HTMLLinkElement/link-and-subresource-test.html39
-rw-r--r--LayoutTests/fast/dom/HTMLLinkElement/onload-completion-test-expected.txt4
-rw-r--r--LayoutTests/fast/dom/HTMLLinkElement/onload-completion-test.html27
-rw-r--r--LayoutTests/fast/dom/HTMLLinkElement/pending-stylesheet-count.html32
-rw-r--r--LayoutTests/fast/dom/HTMLLinkElement/prefetch-detached-expected.txt3
-rw-r--r--LayoutTests/fast/dom/HTMLLinkElement/prefetch-detached.html20
-rw-r--r--LayoutTests/fast/dom/HTMLLinkElement/prefetch-expected.txt4
-rw-r--r--LayoutTests/fast/dom/HTMLLinkElement/prefetch-onload-expected.txt6
-rw-r--r--LayoutTests/fast/dom/HTMLLinkElement/prefetch-onload.html29
-rw-r--r--LayoutTests/fast/dom/HTMLLinkElement/prefetch.html23
-rw-r--r--LayoutTests/fast/dom/HTMLLinkElement/prefetch.link1
-rw-r--r--LayoutTests/fast/dom/HTMLLinkElement/resources/nick.jpgbin0 -> 35637 bytes
-rwxr-xr-xLayoutTests/platform/android/layout_test_directories.txt1
-rw-r--r--LayoutTests/platform/android/test_expectations.txt3
-rw-r--r--Source/WebCore/platform/graphics/android/GraphicsLayerAndroid.cpp5
-rw-r--r--Source/WebCore/platform/graphics/android/LayerAndroid.cpp1
-rw-r--r--Source/WebCore/platform/graphics/android/ShaderProgram.cpp3
-rw-r--r--Source/WebKit/android/WebCoreSupport/ChromeClientAndroid.cpp27
-rw-r--r--Source/WebKit/android/WebCoreSupport/ChromeClientAndroid.h5
20 files changed, 224 insertions, 19 deletions
diff --git a/LayoutTests/fast/dom/HTMLLinkElement/link-and-subresource-test-expected.txt b/LayoutTests/fast/dom/HTMLLinkElement/link-and-subresource-test-expected.txt
new file mode 100644
index 0000000..ac1b174
--- /dev/null
+++ b/LayoutTests/fast/dom/HTMLLinkElement/link-and-subresource-test-expected.txt
@@ -0,0 +1,10 @@
+nick.jpg has MIME type image/jpeg
+nick.jpg has MIME type image/jpeg
+This test verifies that an image which is prefetched, and which is also contained as a subresource of the current document can be loaded correctly as a subresource. See bug 49236 in which this wasn't working.
+
+When this test succeeds, you'll see an image of Nick on a sailboat immediately below this text. When this test fails, you will see no images at all.
+
+NICK_ONLOAD called
+NICK_ONLOAD called
+SUCCESS. Two loads.
+
diff --git a/LayoutTests/fast/dom/HTMLLinkElement/link-and-subresource-test.html b/LayoutTests/fast/dom/HTMLLinkElement/link-and-subresource-test.html
new file mode 100644
index 0000000..594eafd
--- /dev/null
+++ b/LayoutTests/fast/dom/HTMLLinkElement/link-and-subresource-test.html
@@ -0,0 +1,39 @@
+<html>
+<body>
+<script>
+function log(message)
+{
+ var item = document.createElement("li");
+ item.appendChild(document.createTextNode(message));
+ document.getElementById("console").appendChild(item);
+}
+
+nick_load_count = 0
+
+function nick_onload()
+{
+ log("NICK_ONLOAD called");
+ ++nick_load_count;
+ if (nick_load_count == 2) {
+ log("SUCCESS. Two loads.");
+ layoutTestController.notifyDone();
+ }
+}
+
+if (window.layoutTestController) {
+ layoutTestController.waitUntilDone();
+ layoutTestController.dumpAsText();
+ layoutTestController.dumpResourceResponseMIMETypes();
+}
+</script>
+<p>This test verifies that an image which is prefetched, and which is also contained as a
+subresource of the current document can be loaded correctly as a subresource. See
+bug 49236 in which this wasn't working.
+<p>When this test succeeds, you'll see an image of Nick on a sailboat immediately below
+this text. When this test fails, you will see no images at all.
+<link rel="prefetch" href="resources/nick.jpg" onload="nick_onload()" />
+<img src="resources/nick.jpg" onload="nick_onload()" />
+<hr>
+<p><ol id="console"></ol></p>
+</body></html>
+
diff --git a/LayoutTests/fast/dom/HTMLLinkElement/onload-completion-test-expected.txt b/LayoutTests/fast/dom/HTMLLinkElement/onload-completion-test-expected.txt
new file mode 100644
index 0000000..bc6cf74
--- /dev/null
+++ b/LayoutTests/fast/dom/HTMLLinkElement/onload-completion-test-expected.txt
@@ -0,0 +1,4 @@
+This test verifies that at the time a body onload function is called that the subresources of this page (in particular the image) are already loaded. The page verifies that the image has the expected dimensions at the time of the onload event, and prints its result based on that. This is a regression test for a bug introduced by the patch for bug 3652.
+
+
+SUCCESS.
diff --git a/LayoutTests/fast/dom/HTMLLinkElement/onload-completion-test.html b/LayoutTests/fast/dom/HTMLLinkElement/onload-completion-test.html
new file mode 100644
index 0000000..6e24184
--- /dev/null
+++ b/LayoutTests/fast/dom/HTMLLinkElement/onload-completion-test.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<script text="text/javascript">
+function runtest()
+{
+var nick=document.getElementById('nick');
+var row=document.getElementById('the_table').insertRow(-1);
+var result=row.insertCell(0);
+if (nick.naturalWidth == 320 && nick.naturalHeight == 240)
+ result.innerHTML = "SUCCESS.";
+else
+ result.innerHTML = "FAILURE!";
+if (window.layoutTestController)
+ layoutTestController.dumpAsText();
+}
+</script>
+<body onload="runtest()">
+<p>This test verifies that at the time a body onload function is
+called that the subresources of this page (in particular the image)
+are already loaded. The page verifies that the image has the expected
+dimensions at the time of the onload event, and prints its result
+based on that. This is a regression test for a bug introduced by the
+patch for bug 3652.</p>
+<img id=nick src="resources/nick.jpg">
+<table id="the_table" border="1">
+<tr><td></td></tr>
+</table>
+</body>
diff --git a/LayoutTests/fast/dom/HTMLLinkElement/pending-stylesheet-count.html b/LayoutTests/fast/dom/HTMLLinkElement/pending-stylesheet-count.html
new file mode 100644
index 0000000..435021b
--- /dev/null
+++ b/LayoutTests/fast/dom/HTMLLinkElement/pending-stylesheet-count.html
@@ -0,0 +1,32 @@
+<html>
+<head>
+<style type="text/css">
+ #square { width: 100px; height: 100px; }
+ .red { background: red; }
+ .green { background: green; }
+</style>
+<script type="text/javascript">
+ function test()
+ {
+ var linkStr = '<link rel="stylesheet" type="text/css" href="resources/doesnotneedtoexist">';
+ var target = document.getElementById('t');
+ target.innerHTML = linkStr;
+ target.innerHTML = '';
+ var square = document.getElementById('square');
+ square.className = 'green';
+ }
+</script>
+</head>
+<body onload="test()">
+ <p>
+ This is a test for <i><a href="https://bugs.webkit.org/show_bug.cgi?id=9252">http://bugzilla.opendarwin.org/show_bug.cgi?id=9252</a>
+ REGRESSION: Very odd roll-over issues (content disappearing)</i>.
+ </p>
+ <p>
+ There should be a green square below.
+ </p>
+ <hr>
+ <div id="t"></div>
+ <div id="square" class="red"></div>
+</body>
+</html>
diff --git a/LayoutTests/fast/dom/HTMLLinkElement/prefetch-detached-expected.txt b/LayoutTests/fast/dom/HTMLLinkElement/prefetch-detached-expected.txt
new file mode 100644
index 0000000..44311f8
--- /dev/null
+++ b/LayoutTests/fast/dom/HTMLLinkElement/prefetch-detached-expected.txt
@@ -0,0 +1,3 @@
+This test passes if it doesn't crash.
+
+
diff --git a/LayoutTests/fast/dom/HTMLLinkElement/prefetch-detached.html b/LayoutTests/fast/dom/HTMLLinkElement/prefetch-detached.html
new file mode 100644
index 0000000..2d5d76c
--- /dev/null
+++ b/LayoutTests/fast/dom/HTMLLinkElement/prefetch-detached.html
@@ -0,0 +1,20 @@
+<body>
+<script>
+if (window.layoutTestController)
+ layoutTestController.dumpAsText();
+</script>
+<html>
+<p>This test passes if it doesn't crash.</p>
+<div id="frag"></div>
+<script>
+// Fun with innerHTML.
+document.getElementById('frag').innerHTML = '<link href="prefetch.link" rel="prefetch">';
+
+// Fun with detached documents.
+var doc = document.implementation.createDocument('application/html+xml');
+var lnk = doc.createElement('link');
+lnk.setAttribute('rel', 'prefetch');
+lnk.setAttribute('href', 'prefetch.link');
+doc.documentElement.appendChild(lnk);
+</script>
+</html>
diff --git a/LayoutTests/fast/dom/HTMLLinkElement/prefetch-expected.txt b/LayoutTests/fast/dom/HTMLLinkElement/prefetch-expected.txt
new file mode 100644
index 0000000..9ea65dc
--- /dev/null
+++ b/LayoutTests/fast/dom/HTMLLinkElement/prefetch-expected.txt
@@ -0,0 +1,4 @@
+prefetch.link has MIME type application/octet-stream
+This test requires DumpRenderTree to see the log of what resources are loaded.
+
+SUCCESS! prefetch onload called.
diff --git a/LayoutTests/fast/dom/HTMLLinkElement/prefetch-onload-expected.txt b/LayoutTests/fast/dom/HTMLLinkElement/prefetch-onload-expected.txt
new file mode 100644
index 0000000..dac6e93
--- /dev/null
+++ b/LayoutTests/fast/dom/HTMLLinkElement/prefetch-onload-expected.txt
@@ -0,0 +1,6 @@
+This tests that onload events can be attached to link elements with rel=prefetch. Since prefetch links are just there as a performance optimization, the onload event is their only programatic side-effect.
+
+If it works you should see a message below saying the test has passed.
+
+TEST PASSED.
+
diff --git a/LayoutTests/fast/dom/HTMLLinkElement/prefetch-onload.html b/LayoutTests/fast/dom/HTMLLinkElement/prefetch-onload.html
new file mode 100644
index 0000000..37cfdbf
--- /dev/null
+++ b/LayoutTests/fast/dom/HTMLLinkElement/prefetch-onload.html
@@ -0,0 +1,29 @@
+<html>
+<head>
+<script type="text/javascript">
+function log(message)
+{
+ var item = document.createElement("li");
+ item.appendChild(document.createTextNode(message));
+ document.getElementById("console").appendChild(item);
+}
+function done()
+{
+ log("TEST PASSED.");
+ if (window.layoutTestController)
+ layoutTestController.notifyDone();
+ }
+if (window.layoutTestController) {
+ layoutTestController.dumpAsText();
+ layoutTestController.waitUntilDone();
+}
+</script>
+</head>
+<body>
+<p>This tests that onload events can be attached to link elements with rel=prefetch. Since prefetch links are just there as a performance optimization, the onload event is their only programatic side-effect.</p>
+<p>If it works you should see a message below saying the test has passed.</p>
+<link href="prefetch.link" rel="prefetch" onload="done()" >
+<hr>
+<p><ol id="console"></ol></p>
+</body>
+</html>
diff --git a/LayoutTests/fast/dom/HTMLLinkElement/prefetch.html b/LayoutTests/fast/dom/HTMLLinkElement/prefetch.html
new file mode 100644
index 0000000..5c223f9
--- /dev/null
+++ b/LayoutTests/fast/dom/HTMLLinkElement/prefetch.html
@@ -0,0 +1,23 @@
+<body>
+<script>
+function log(message) {
+ var item = document.createElement("li");
+ item.appendChild(document.createTextNode(message));
+ document.getElementById("console").appendChild(item);
+}
+function prefetch_onload() {
+ log("SUCCESS! prefetch onload called.");
+ layoutTestController.notifyDone();
+}
+if (window.layoutTestController) {
+ layoutTestController.waitUntilDone();
+ layoutTestController.dumpAsText();
+ layoutTestController.dumpResourceResponseMIMETypes();
+}
+</script>
+<html>
+<p>This test requires DumpRenderTree to see the log of what resources are loaded.
+<link href="prefetch.link" rel="prefetch" onload="prefetch_onload()">
+<p><ol id="console"></ol>
+</html>
+
diff --git a/LayoutTests/fast/dom/HTMLLinkElement/prefetch.link b/LayoutTests/fast/dom/HTMLLinkElement/prefetch.link
new file mode 100644
index 0000000..9051267
--- /dev/null
+++ b/LayoutTests/fast/dom/HTMLLinkElement/prefetch.link
@@ -0,0 +1 @@
+This is the link that is fetched by the prefetch-onload test
diff --git a/LayoutTests/fast/dom/HTMLLinkElement/resources/nick.jpg b/LayoutTests/fast/dom/HTMLLinkElement/resources/nick.jpg
new file mode 100644
index 0000000..3d9fb57
--- /dev/null
+++ b/LayoutTests/fast/dom/HTMLLinkElement/resources/nick.jpg
Binary files differ
diff --git a/LayoutTests/platform/android/layout_test_directories.txt b/LayoutTests/platform/android/layout_test_directories.txt
index 703c4da..a1288ac 100755
--- a/LayoutTests/platform/android/layout_test_directories.txt
+++ b/LayoutTests/platform/android/layout_test_directories.txt
@@ -18,6 +18,7 @@ fast/dom/HTMLFormElement
fast/dom/HTMLHtmlElement
fast/dom/HTMLKeygenElement
fast/dom/HTMLLabelElement
+fast/dom/HTMLLinklement
fast/dom/HTMLMetaElement
fast/dom/HTMLTableRowElement
fast/dom/HTMLTableSectionElement
diff --git a/LayoutTests/platform/android/test_expectations.txt b/LayoutTests/platform/android/test_expectations.txt
index d0a039c..c42969c 100644
--- a/LayoutTests/platform/android/test_expectations.txt
+++ b/LayoutTests/platform/android/test_expectations.txt
@@ -40,6 +40,8 @@ fast/regex/slow.html CRASH // Causes DumpRenderTree to hang with V8
// This first block of tests are for features for which Android
// should pass all tests. They are skipped only temporarily.
// TODO: Fix these failing tests and remove them from this list.
+fast/dom/HTMLLinkElement/link-and-subresource-test.html FAIL // Requires layoutTestController.dumpResourceResponseMIMETypes(), see http://b/issue?id=4470249
+fast/dom/HTMLLinkElement/prefetch.html FAIL // Requires layoutTestController.dumpResourceResponseMIMETypes(), see http://b/issue?id=4470249
fast/encoding/char-decoding.html FAIL // fails in Java HTTP stack, see http://b/issue?id=3047156
fast/encoding/hanarei-blog32-fc2-com.html FAIL // fails in Java HTTP stack, see http://b/issue?id=3046986
fast/encoding/mailto-always-utf-8.html FAIL // Requires waitForPolicyDelegate(), see http://b/issue?id=3043468
@@ -92,6 +94,7 @@ dom/xhtml/level3/core/nodegetbaseuri17.xhtml FAIL
dom/xhtml/level3/core/nodegetbaseuri18.xhtml FAIL
dom/xhtml/level3/core/nodelookupnamespaceuri01.xhtml FAIL
dom/xhtml/level3/core/nodelookupprefix19.xhtml FAIL
+fast/dom/HTMLLinkElement/pending-stylesheet-count.html FAIL
// Expected failures for pixel tests
fast/encoding/denormalised-voiced-japanese-chars.html FAIL
diff --git a/Source/WebCore/platform/graphics/android/GraphicsLayerAndroid.cpp b/Source/WebCore/platform/graphics/android/GraphicsLayerAndroid.cpp
index d7b792b..992585a 100644
--- a/Source/WebCore/platform/graphics/android/GraphicsLayerAndroid.cpp
+++ b/Source/WebCore/platform/graphics/android/GraphicsLayerAndroid.cpp
@@ -226,8 +226,11 @@ void GraphicsLayerAndroid::updateFixedPosition()
RenderLayer* renderLayer = renderLayerFromClient(m_client);
RenderView* view = static_cast<RenderView*>(renderLayer->renderer());
+ if (!view)
+ return;
+
// We will need the Iframe flag in the LayerAndroid tree for fixed position
- if (view && view->isRenderIFrame())
+ if (view->isRenderIFrame())
m_contentLayer->setIsIframe(true);
// If we are a fixed position layer, just set it
if (view->isPositioned() && view->style()->position() == FixedPosition) {
diff --git a/Source/WebCore/platform/graphics/android/LayerAndroid.cpp b/Source/WebCore/platform/graphics/android/LayerAndroid.cpp
index 95ccedc..c0fbf61 100644
--- a/Source/WebCore/platform/graphics/android/LayerAndroid.cpp
+++ b/Source/WebCore/platform/graphics/android/LayerAndroid.cpp
@@ -1315,6 +1315,7 @@ void LayerAndroid::dumpLayers(FILE* file, int indentLevel) const
writeMatrix(file, indentLevel + 1, "drawMatrix", drawTransform());
writeMatrix(file, indentLevel + 1, "transformMatrix", m_transform);
+ writeRect(file, indentLevel + 1, "clippingRect", SkRect(m_clippingRect));
if (m_isFixed) {
writeLength(file, indentLevel + 1, "fixedLeft", m_fixedLeft);
diff --git a/Source/WebCore/platform/graphics/android/ShaderProgram.cpp b/Source/WebCore/platform/graphics/android/ShaderProgram.cpp
index 6933890..0117bc0 100644
--- a/Source/WebCore/platform/graphics/android/ShaderProgram.cpp
+++ b/Source/WebCore/platform/graphics/android/ShaderProgram.cpp
@@ -333,9 +333,6 @@ void ShaderProgram::clip(const FloatRect& clip)
if (clip == m_clipRect)
return;
- if (clip.width() == 0 && clip.height() == 0)
- return;
-
// we should only call glScissor in this function, so that we can easily
// track the current clipping rect.
diff --git a/Source/WebKit/android/WebCoreSupport/ChromeClientAndroid.cpp b/Source/WebKit/android/WebCoreSupport/ChromeClientAndroid.cpp
index 24eb945..c3732e7 100644
--- a/Source/WebKit/android/WebCoreSupport/ChromeClientAndroid.cpp
+++ b/Source/WebKit/android/WebCoreSupport/ChromeClientAndroid.cpp
@@ -361,8 +361,7 @@ void ChromeClientAndroid::exceededDatabaseQuota(Frame* frame, const String& name
SecurityOrigin* origin = frame->document()->securityOrigin();
DatabaseTracker& tracker = WebCore::DatabaseTracker::tracker();
- // We want to wait on a new quota from the UI thread. Reset the m_newQuota variable to represent we haven't received a new quota.
- m_newQuota = -1;
+ m_isNewQuotaSet = false;
// This origin is being tracked and has exceeded it's quota. Call into
// the Java side of things to inform the user.
@@ -380,15 +379,19 @@ void ChromeClientAndroid::exceededDatabaseQuota(Frame* frame, const String& name
// We've sent notification to the browser so now wait for it to come back.
m_quotaThreadLock.lock();
- while (m_newQuota == -1) {
+ while (!m_isNewQuotaSet) {
m_quotaThreadCondition.wait(m_quotaThreadLock);
}
m_quotaThreadLock.unlock();
- // If new quota is unavailable, we may be able to resolve the situation by shrinking the quota of an origin that asked for a lot but is only using a little.
- // If we find such a site, shrink it's quota and ask Java to try again.
+ if (m_newQuota < currentQuota)
+ m_newQuota = currentQuota;
- if ((unsigned long long) m_newQuota == currentQuota && !m_triedToReclaimDBQuota) {
+ // If new quota is unavailable, we may be able to resolve the situation by
+ // shrinking the quota of an origin that asked for a lot but is only using a
+ // little. If we find such a site, shrink it's quota and ask Java to try
+ // again.
+ if (m_newQuota == currentQuota && !m_triedToReclaimDBQuota) {
m_triedToReclaimDBQuota = true; // we should only try this once per quota overflow.
unsigned long long reclaimedQuotaBytes = tryToReclaimDatabaseQuota(origin);
@@ -435,10 +438,7 @@ static unsigned long long tryToReclaimDatabaseQuota(SecurityOrigin* originNeedin
#if ENABLE(OFFLINE_WEB_APPLICATIONS)
void ChromeClientAndroid::reachedMaxAppCacheSize(int64_t spaceNeeded)
{
- // Set m_newQuota before calling into the Java side. If we do this after,
- // we could overwrite the result passed from the Java side and deadlock in the
- // wait call below.
- m_newQuota = -1;
+ m_isNewQuotaSet = false;
Page* page = m_webFrame->page();
Frame* mainFrame = page->mainFrame();
FrameView* view = mainFrame->view();
@@ -446,7 +446,7 @@ void ChromeClientAndroid::reachedMaxAppCacheSize(int64_t spaceNeeded)
// We've sent notification to the browser so now wait for it to come back.
m_quotaThreadLock.lock();
- while (m_newQuota == -1) {
+ while (!m_isNewQuotaSet) {
m_quotaThreadCondition.wait(m_quotaThreadLock);
}
m_quotaThreadLock.unlock();
@@ -516,9 +516,10 @@ void ChromeClientAndroid::setCursor(const Cursor&)
notImplemented();
}
-void ChromeClientAndroid::wakeUpMainThreadWithNewQuota(long newQuota) {
+void ChromeClientAndroid::wakeUpMainThreadWithNewQuota(long long newQuota) {
MutexLocker locker(m_quotaThreadLock);
- m_newQuota = newQuota;
+ m_newQuota = newQuota < 0 ? 0 : newQuota;
+ m_isNewQuotaSet = true;
m_quotaThreadCondition.signal();
}
diff --git a/Source/WebKit/android/WebCoreSupport/ChromeClientAndroid.h b/Source/WebKit/android/WebCoreSupport/ChromeClientAndroid.h
index d49cec8..81b3d49 100644
--- a/Source/WebKit/android/WebCoreSupport/ChromeClientAndroid.h
+++ b/Source/WebKit/android/WebCoreSupport/ChromeClientAndroid.h
@@ -165,7 +165,7 @@ namespace android {
// Android-specific
void setWebFrame(android::WebFrame* webframe);
android::WebFrame* webFrame() { return m_webFrame; }
- void wakeUpMainThreadWithNewQuota(long newQuota);
+ void wakeUpMainThreadWithNewQuota(long long newQuota);
#if USE(ACCELERATED_COMPOSITING)
virtual void attachRootGraphicsLayer(WebCore::Frame*, WebCore::GraphicsLayer* g);
@@ -207,7 +207,8 @@ namespace android {
#endif
WTF::ThreadCondition m_quotaThreadCondition;
WTF::Mutex m_quotaThreadLock;
- long m_newQuota;
+ unsigned long long m_newQuota;
+ bool m_isNewQuotaSet;
bool m_triedToReclaimDBQuota;
};