Page keeps reloading when viewing photos in google drive (due to too high canvas...
authorantti@apple.com <antti@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 23 May 2018 16:09:54 +0000 (16:09 +0000)
committerantti@apple.com <antti@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 23 May 2018 16:09:54 +0000 (16:09 +0000)
https://bugs.webkit.org/show_bug.cgi?id=185903
<rdar://problem/38420562>

Reviewed by Simon Fraser.

Source/WebCore:

The canvas memory usage limits don't work on iOS since the current 2GB minimum limit is
larger than the maximum process size.

* html/HTMLCanvasElement.cpp:
(WebCore::maxActivePixelMemory):

Always base this on the reported ramSize() on iOS. Make it still fairly large to not risk breaking
any currently working content. In practice the limit computes to 448MB on device at the moment.

LayoutTests:

* platform/ios-simulator/fast/canvas/canvas-crash-expected.txt:
* platform/ios-simulator/fast/canvas/canvas-skia-excessive-size-expected.txt: Added.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@232113 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/ChangeLog
LayoutTests/platform/ios-simulator/fast/canvas/canvas-crash-expected.txt
LayoutTests/platform/ios-simulator/fast/canvas/canvas-skia-excessive-size-expected.txt [new file with mode: 0644]
Source/WebCore/ChangeLog
Source/WebCore/html/HTMLCanvasElement.cpp

index c880bf4..3c45402 100644 (file)
@@ -1,3 +1,14 @@
+2018-05-23  Antti Koivisto  <antti@apple.com>
+
+        Page keeps reloading when viewing photos in google drive (due to too high canvas memory limits)
+        https://bugs.webkit.org/show_bug.cgi?id=185903
+        <rdar://problem/38420562>
+
+        Reviewed by Simon Fraser.
+
+        * platform/ios-simulator/fast/canvas/canvas-crash-expected.txt:
+        * platform/ios-simulator/fast/canvas/canvas-skia-excessive-size-expected.txt: Added.
+
 2018-05-22  Manuel Rego Casasnovas  <rego@igalia.com>
 
         [css-text] W3C test suite gardening
index 6b6d43c..beb744a 100644 (file)
@@ -1,2 +1,3 @@
-CONSOLE MESSAGE: line 16: Canvas area exceeds the maximum limit (width * height > 16777216).
-PASSED 
+CONSOLE MESSAGE: line 15: Total canvas memory use exceeds the maximum limit (256 MB).
+CONSOLE MESSAGE: line 16: TypeError: null is not an object (evaluating 'ctx.putImageData')
+
diff --git a/LayoutTests/platform/ios-simulator/fast/canvas/canvas-skia-excessive-size-expected.txt b/LayoutTests/platform/ios-simulator/fast/canvas/canvas-skia-excessive-size-expected.txt
new file mode 100644 (file)
index 0000000..afb81f8
--- /dev/null
@@ -0,0 +1,6 @@
+CONSOLE MESSAGE: line 20: Total canvas memory use exceeds the maximum limit (256 MB).
+This test checks to see if the browser survives the attempted creation of an excessively large canvas.
+
+Canvas 2d context = null!
+Survived canvas creation attempt. Width = 134217728
+
index 9a14043..6d6163a 100644 (file)
@@ -1,3 +1,20 @@
+2018-05-23  Antti Koivisto  <antti@apple.com>
+
+        Page keeps reloading when viewing photos in google drive (due to too high canvas memory limits)
+        https://bugs.webkit.org/show_bug.cgi?id=185903
+        <rdar://problem/38420562>
+
+        Reviewed by Simon Fraser.
+
+        The canvas memory usage limits don't work on iOS since the current 2GB minimum limit is
+        larger than the maximum process size.
+
+        * html/HTMLCanvasElement.cpp:
+        (WebCore::maxActivePixelMemory):
+
+        Always base this on the reported ramSize() on iOS. Make it still fairly large to not risk breaking
+        any currently working content. In practice the limit computes to 448MB on device at the moment.
+
 2018-05-23  Zalan Bujtas  <zalan@apple.com>
 
         [LFC] Implement positioning for replaced out-of-flow elements
index 664edf0..3e62371 100644 (file)
@@ -196,7 +196,11 @@ static inline size_t maxActivePixelMemory()
     static size_t maxPixelMemory;
     static std::once_flag onceFlag;
     std::call_once(onceFlag, [] {
+#if PLATFORM(IOS)
+        maxPixelMemory = ramSize() / 2;
+#else
         maxPixelMemory = std::max(ramSize() / 4, 2151 * MB);
+#endif
     });
     return maxPixelMemory;
 }