Index: third_party/WebKit/Source/core/input/InputDeviceCapabilities.h |
diff --git a/third_party/WebKit/Source/core/input/InputDeviceCapabilities.h b/third_party/WebKit/Source/core/input/InputDeviceCapabilities.h |
index d8731f3e86d0cc2fe91c3b074b8e74b5f7338689..f94b0567d735a1a5d4267ebae7a8568e28040df6 100644 |
--- a/third_party/WebKit/Source/core/input/InputDeviceCapabilities.h |
+++ b/third_party/WebKit/Source/core/input/InputDeviceCapabilities.h |
@@ -11,14 +11,25 @@ |
namespace blink { |
+class DOMWindow; |
+ |
class CORE_EXPORT InputDeviceCapabilities final |
: public GarbageCollected<InputDeviceCapabilities>, |
public ScriptWrappable { |
DEFINE_WRAPPERTYPEINFO(); |
public: |
- static InputDeviceCapabilities* create(bool firesTouchEvents) { |
- return new InputDeviceCapabilities(firesTouchEvents); |
+ enum Descriptor { |
+ // |Null| represents a null InputDeviceCapabilities*. |
+ Null = 0x0, |
+ // |None| represents an empty InputDeviceCapabilities instance with |
+ // no capabilities. |
+ None = 0x1, |
+ FiresTouchEvents = 0x2, |
+ }; |
+ |
+ static InputDeviceCapabilities* create(Descriptor descriptor) { |
+ return new InputDeviceCapabilities(descriptor); |
} |
static InputDeviceCapabilities* create( |
@@ -31,8 +42,8 @@ class CORE_EXPORT InputDeviceCapabilities final |
DEFINE_INLINE_TRACE() {} |
private: |
- InputDeviceCapabilities(bool firesTouchEvents); |
- InputDeviceCapabilities(const InputDeviceCapabilitiesInit&); |
+ explicit InputDeviceCapabilities(Descriptor); |
+ explicit InputDeviceCapabilities(const InputDeviceCapabilitiesInit&); |
// Whether this device dispatches touch events. This mainly lets developers |
// avoid handling both touch and mouse events dispatched for a single user |
@@ -40,19 +51,50 @@ class CORE_EXPORT InputDeviceCapabilities final |
bool m_firesTouchEvents; |
}; |
-// Grouping constant-valued InputDeviceCapabilities objects together, |
-// which is kept and used by each 'view' (DOMWindow) that dispatches |
-// events parameterized over InputDeviceCapabilities. |
-// |
-// TODO(sof): lazily instantiate InputDeviceCapabilities instances upon |
-// UIEvent access instead. This would allow internal tracking of such |
-// capabilities by value. |
+// To be able to delay the creation of InputDeviceCapabilities instances |
+// until requested from script, we characterize the capabilities by a |
+// descriptor and propagate its value internally. |
+class InputDeviceCapabilitiesValue final { |
+ DISALLOW_NEW(); |
+ |
+ public: |
+ InputDeviceCapabilitiesValue() |
+ : m_descriptor(InputDeviceCapabilities::Null) {} |
+ |
+ InputDeviceCapabilitiesValue(const InputDeviceCapabilities::Descriptor desc) |
+ : m_descriptor(desc) {} |
+ |
+ // Provided for convenience while InputDeviceCapabilities only supports |
+ // a single capability. |
+ explicit InputDeviceCapabilitiesValue(bool firesTouchEvents) |
+ : m_descriptor(firesTouchEvents |
+ ? InputDeviceCapabilities::FiresTouchEvents |
+ : InputDeviceCapabilities::None) {} |
+ |
+ explicit InputDeviceCapabilitiesValue(InputDeviceCapabilities* capabilities) |
+ : m_descriptor(InputDeviceCapabilities::Null), |
+ m_capabilities(capabilities) {} |
+ |
+ InputDeviceCapabilitiesValue(const InputDeviceCapabilitiesValue& other) |
+ : m_descriptor(other.m_descriptor), |
+ m_capabilities(other.m_capabilities) {} |
+ |
+ InputDeviceCapabilities* getCapabilities(DOMWindow*); |
+ |
+ DEFINE_INLINE_TRACE() { visitor->trace(m_capabilities); } |
+ |
+ private: |
+ InputDeviceCapabilities::Descriptor m_descriptor; |
+ Member<InputDeviceCapabilities> m_capabilities; |
+}; |
+ |
+// Grouping a DOMWindow's InputDeviceCapabilities objects together. |
class InputDeviceCapabilitiesConstants final |
: public GarbageCollected<InputDeviceCapabilitiesConstants> { |
public: |
// Returns an InputDeviceCapabilities which has |
// |firesTouchEvents| set to value of |firesTouch|. |
- InputDeviceCapabilities* firesTouchEvents(bool firesTouch); |
+ InputDeviceCapabilities* get(InputDeviceCapabilities::Descriptor); |
DEFINE_INLINE_TRACE() { |
visitor->trace(m_firesTouchEvents); |