]> source.dussan.org Git - vaadin-framework.git/commitdiff
Fix removing extension from a connector that is not its parent (#19569)
authorTeemu Suo-Anttila <teemusa@vaadin.com>
Mon, 8 Feb 2016 14:42:00 +0000 (16:42 +0200)
committerTeemu Suo-Anttila <teemusa@vaadin.com>
Mon, 8 Feb 2016 14:59:48 +0000 (16:59 +0200)
Change-Id: I0201c2dc94cd50d09931d54bb9e18893e6737d9c

server/src/com/vaadin/server/AbstractClientConnector.java
server/tests/src/com/vaadin/tests/server/ExtensionTest.java [new file with mode: 0644]

index fa2b741ddd078b4bff41529c1c5a9bd616ce881a..c624663d50b594eb485ad92f52078e82a39267e7 100644 (file)
@@ -589,6 +589,11 @@ public abstract class AbstractClientConnector implements ClientConnector,
 
     @Override
     public void removeExtension(Extension extension) {
+        if (extension.getParent() != this) {
+            throw new IllegalArgumentException(
+                    "This connector is not the parent for given extension");
+        }
+
         extension.setParent(null);
         extensions.remove(extension);
         markAsDirty();
diff --git a/server/tests/src/com/vaadin/tests/server/ExtensionTest.java b/server/tests/src/com/vaadin/tests/server/ExtensionTest.java
new file mode 100644 (file)
index 0000000..8f8e8dc
--- /dev/null
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2000-2014 Vaadin Ltd.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.vaadin.tests.server;
+
+import org.junit.Test;
+
+import com.vaadin.server.AbstractClientConnector;
+import com.vaadin.server.AbstractExtension;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.TextField;
+
+public class ExtensionTest {
+
+    public static class DummyExtension extends AbstractExtension {
+        public DummyExtension(AbstractClientConnector target) {
+            super(target);
+        }
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testRemoveExtensionFromWrongConnector() {
+        Label l = new Label();
+        TextField t = new TextField();
+        t.removeExtension(new DummyExtension(l));
+    }
+
+}