Index: third_party/WebKit/Source/core/html/HTMLCanvasElement.cpp |
diff --git a/third_party/WebKit/Source/core/html/HTMLCanvasElement.cpp b/third_party/WebKit/Source/core/html/HTMLCanvasElement.cpp |
index 51ad64568734c0db8969c0b6ee5d4b1e86923de3..1752b014d21eacec54b91c9e1e10f9baab0f2c6f 100644 |
--- a/third_party/WebKit/Source/core/html/HTMLCanvasElement.cpp |
+++ b/third_party/WebKit/Source/core/html/HTMLCanvasElement.cpp |
@@ -31,12 +31,18 @@ |
#include "bindings/core/v8/ExceptionState.h" |
#include "bindings/core/v8/ScriptController.h" |
#include "core/HTMLNames.h" |
+#include "core/InputTypeNames.h" |
#include "core/dom/Document.h" |
+#include "core/dom/Element.h" |
+#include "core/dom/ElementTraversal.h" |
#include "core/dom/ExceptionCode.h" |
#include "core/fileapi/File.h" |
#include "core/frame/ImageBitmap.h" |
#include "core/frame/LocalFrame.h" |
#include "core/frame/Settings.h" |
+#include "core/html/HTMLImageElement.h" |
+#include "core/html/HTMLInputElement.h" |
+#include "core/html/HTMLSelectElement.h" |
#include "core/html/ImageData.h" |
#include "core/html/canvas/CanvasAsyncBlobCreator.h" |
#include "core/html/canvas/CanvasContextCreationAttributes.h" |
@@ -1031,4 +1037,50 @@ bool HTMLCanvasElement::isOpaque() const |
return m_context && !m_context->hasAlpha(); |
} |
+bool HTMLCanvasElement::isSupportedInteractiveCanvasFallback(const Element& element) |
+{ |
+ if (!element.isDescendantOf(this)) |
+ return false; |
+ |
+ if (element.hasTagName(HTMLNames::aTag)) |
Justin Novosad
2016/02/12 15:10:45
You should use the helpers (isHTMLAnchorElement) i
zino
2016/02/12 16:40:34
Done.
|
+ return !Traversal<HTMLImageElement>::firstWithin(element); |
Justin Novosad
2016/02/12 15:10:45
Please add a comment to explain this.
zino
2016/02/12 16:40:34
Done.
|
+ |
+ if (element.hasTagName(HTMLNames::buttonTag)) |
Justin Novosad
2016/02/12 15:10:45
Could be "else if". Same thing for "if" statements
zino
2016/02/12 16:40:34
As far as I know, we don't use "else if" in Blink.
|
+ return true; |
+ |
+ if (element.hasTagName(HTMLNames::inputTag)) { |
+ const HTMLInputElement& inputElement = toHTMLInputElement(element); |
+ if (inputElement.type() == InputTypeNames::checkbox || inputElement.type() == InputTypeNames::radio |
+ || (inputElement.isTextButton() && !inputElement.isImage())) |
Justin Novosad
2016/02/12 15:10:45
Why do you need to check !inputElement.isImage()?
zino
2016/02/12 16:40:34
Done.
|
+ return true; |
+ } |
+ |
+ if (element.hasTagName(HTMLNames::selectTag)) { |
+ const HTMLSelectElement& selectElement = toHTMLSelectElement(element); |
+ if (selectElement.multiple() || selectElement.size() > 1) |
+ return true; |
+ } |
+ |
+ if (isHTMLOptionElement(element) && element.parentNode() && isHTMLSelectElement(*element.parentNode())) { |
+ const HTMLSelectElement& selectElement = toHTMLSelectElement(*element.parentNode()); |
+ if (selectElement.multiple() || selectElement.size() > 1) |
Justin Novosad
2016/02/12 15:10:45
Add a comment to explain this condition.
zino
2016/02/12 16:40:34
Done.
|
+ return true; |
+ } |
+ |
+ if (element.fastHasAttribute(HTMLNames::tabindexAttr)) |
+ return true; |
+ |
+ if (element.hasTagName(HTMLNames::tableTag) |
+ || element.hasTagName(HTMLNames::captionTag) |
+ || element.hasTagName(HTMLNames::theadTag) |
+ || element.hasTagName(HTMLNames::tbodyTag) |
+ || element.hasTagName(HTMLNames::tfootTag) |
+ || element.hasTagName(HTMLNames::trTag) |
+ || element.hasTagName(HTMLNames::tdTag) |
+ || element.hasTagName(HTMLNames::thTag)) |
+ return true; |
+ |
+ return false; |
+} |
+ |
} // namespace blink |