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

Unified Diff: third_party/WebKit/Source/core/input/InputDeviceCapabilities.h

Issue 2678683002: Delay instantiating InputDeviceCapabilities until accessed. (Closed)
Patch Set: rebased Created 3 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/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);

Powered by Google App Engine
This is Rietveld 408576698