Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(13)

Unified Diff: third_party/WebKit/Source/core/html/HTMLCanvasElement.cpp

Issue 1692183002: Canvas2d: The control in hit region should be a canvas fallback element. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698