Chromium Code Reviews| 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 |