diff --git a/dom/canvas/CanvasRenderingContext2D.cpp b/dom/canvas/CanvasRenderingContext2D.cpp index 6d8b064916d6..5c73f3b07b23 100644 --- a/dom/canvas/CanvasRenderingContext2D.cpp +++ b/dom/canvas/CanvasRenderingContext2D.cpp @@ -3230,6 +3230,12 @@ CanvasRenderingContext2D::RemoveHitRegion(const nsAString& id) } } +void +CanvasRenderingContext2D::ClearHitRegions() +{ + mHitRegionsOptions.Clear(); +} + bool CanvasRenderingContext2D::GetHitRegionRect(Element* aElement, nsRect& aRect) { diff --git a/dom/canvas/CanvasRenderingContext2D.h b/dom/canvas/CanvasRenderingContext2D.h index ebaa3f5e6faf..144800df77fc 100644 --- a/dom/canvas/CanvasRenderingContext2D.h +++ b/dom/canvas/CanvasRenderingContext2D.h @@ -269,6 +269,7 @@ public: void AddHitRegion(const HitRegionOptions& options, mozilla::ErrorResult& error); void RemoveHitRegion(const nsAString& id); + void ClearHitRegions(); void DrawImage(const HTMLImageOrCanvasOrVideoElement& image, double dx, double dy, mozilla::ErrorResult& error) diff --git a/dom/canvas/test/test_hitregion_canvas.html b/dom/canvas/test/test_hitregion_canvas.html index 273aec3dbc1c..4fc5145f3bf8 100644 --- a/dom/canvas/test/test_hitregion_canvas.html +++ b/dom/canvas/test/test_hitregion_canvas.html @@ -33,10 +33,26 @@ function test_hitregions() { ctx.addHitRegion({control: e}); ctx.addHitRegion({id: "a", control: d}); ctx.addHitRegion({id: "a", control: d}); - + ctx.removeHitRegion("a"); ctx.removeHitRegion("a"); ctx.removeHitRegion("b"); + + ctx.clearHitRegions(); + } catch (e) { + _thrown_outer = true; + } + ok(!_thrown_outer, ctx.canvas.id + ' should not throw exception'); + + var _thrown_outer = false; + try { + ctx.rect(10,10,100,100); + ctx.addHitRegion({control: d}); + ctx.addHitRegion({control: e}); + ctx.addHitRegion({id: "a", control: d}); + ctx.addHitRegion({id: "a", control: d}); + + ctx.clearHitRegions(); } catch (e) { _thrown_outer = true; } diff --git a/dom/webidl/CanvasRenderingContext2D.webidl b/dom/webidl/CanvasRenderingContext2D.webidl index 0f24f684a064..6902f1c3684c 100644 --- a/dom/webidl/CanvasRenderingContext2D.webidl +++ b/dom/webidl/CanvasRenderingContext2D.webidl @@ -125,6 +125,7 @@ interface CanvasRenderingContext2D { // hit regions [Pref="canvas.hitregions.enabled", Throws] void addHitRegion(optional HitRegionOptions options); [Pref="canvas.hitregions.enabled"] void removeHitRegion(DOMString id); + [Pref="canvas.hitregions.enabled"] void clearHitRegions(); // pixel manipulation [NewObject, Throws]