From bf15673f428181dd128564e459cab4f2dee0c25f Mon Sep 17 00:00:00 2001 From: Krzysztof Osmulski Date: Mon, 4 Sep 2017 16:23:12 +0200 Subject: [PATCH 1/3] fixed leaking listeners by moving to key/value structure #39 --- .gitignore | 6 +-- .../jsevaluatortests/JsEvaluatorTests.java | 24 +++++++---- .../mocks/RequestIdGeneratorMock.java | 17 ++++++++ .../build/outputs/aar/jsevaluator-1.0.aar | Bin 20437 -> 21423 bytes .../com/evgenii/jsevaluator/JsEvaluator.java | 39 ++++++++++-------- .../jsevaluator/RequestIdGenerator.java | 10 +++++ 6 files changed, 67 insertions(+), 29 deletions(-) create mode 100644 app/src/androidTest/java/com/evgenii/jsevaluatortests/mocks/RequestIdGeneratorMock.java create mode 100644 jsevaluator/src/main/java/com/evgenii/jsevaluator/RequestIdGenerator.java diff --git a/.gitignore b/.gitignore index 379e14e..79859d1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,6 @@ .gradle /local.properties -/.idea/workspace.xml -/.idea/libraries +/.idea .DS_Store -/build \ No newline at end of file +/build +*.iml diff --git a/app/src/androidTest/java/com/evgenii/jsevaluatortests/JsEvaluatorTests.java b/app/src/androidTest/java/com/evgenii/jsevaluatortests/JsEvaluatorTests.java index 4a2b6f8..b9ff9c1 100644 --- a/app/src/androidTest/java/com/evgenii/jsevaluatortests/JsEvaluatorTests.java +++ b/app/src/androidTest/java/com/evgenii/jsevaluatortests/JsEvaluatorTests.java @@ -8,14 +8,17 @@ import com.evgenii.jsevaluator.interfaces.JsCallback; import com.evgenii.jsevaluatortests.mocks.HandlerWrapperMock; import com.evgenii.jsevaluatortests.mocks.JsCallbackMock; +import com.evgenii.jsevaluatortests.mocks.RequestIdGeneratorMock; import com.evgenii.jsevaluatortests.mocks.WebViewWrapperMock; import java.util.ArrayList; +import java.util.Map; import java.util.concurrent.CountDownLatch; public class JsEvaluatorTests extends AndroidTestCase { protected JsEvaluator mJsEvaluator, mRealJsEvaluator; protected WebViewWrapperMock mWebViewWrapperMock; + protected RequestIdGeneratorMock requestIdGeneratorMock = new RequestIdGeneratorMock(); @Override protected void setUp() { @@ -25,6 +28,7 @@ protected void setUp() { // Because it must be done on the UI thread mWebViewWrapperMock = new WebViewWrapperMock(); mJsEvaluator.setWebViewWrapper(mWebViewWrapperMock); + mJsEvaluator.setRequestIdGenerator(requestIdGeneratorMock); } /** @@ -39,7 +43,7 @@ protected JsEvaluator getRealJsEvaluator(){ public void testCallFunction_shouldEvaluateJs() { final JsCallbackMock callbackMock = new JsCallbackMock(); - + requestIdGeneratorMock.setNextGenerated(0); mJsEvaluator.callFunction("1 + 2", callbackMock, "myFunction", "one", 2); assertEquals(1, mWebViewWrapperMock.mLoadedJavaScript.size()); @@ -54,9 +58,9 @@ public void testCallFunction_shouldRegisterResultCallback() { mJsEvaluator.callFunction("1 + 2", callbackMock, "myFunction"); - final ArrayList callbacks = mJsEvaluator.getResultCallbacks(); + final Map callbacks = mJsEvaluator.getResultCallbacks(); assertEquals(1, callbacks.size()); - assertEquals(callbackMock, callbacks.get(0)); + assertEquals(callbackMock, callbacks.entrySet().iterator().next().getValue()); } public void testEscapeCarriageReturn() { @@ -74,7 +78,7 @@ public void testEscapeSingleQuotes() { public void testEvaluate_shouldEvaluateJs() { final JsCallbackMock callbackMock = new JsCallbackMock(); - + requestIdGeneratorMock.setNextGenerated(0); mJsEvaluator.evaluate("2 * 3", callbackMock); assertEquals(1, mWebViewWrapperMock.mLoadedJavaScript.size()); @@ -83,6 +87,7 @@ public void testEvaluate_shouldEvaluateJs() { } public void testEvaluate_shouldEvaluateWithoutCallback() { + requestIdGeneratorMock.setNextGenerated(-1); mJsEvaluator.evaluate("2 * 3"); assertEquals(1, mWebViewWrapperMock.mLoadedJavaScript.size()); @@ -101,9 +106,9 @@ public void testEvaluate_shouldRegisterResultCallback() { mJsEvaluator.evaluate("2 * 3", callbackMock); - final ArrayList callbacks = mJsEvaluator.getResultCallbacks(); + final Map callbacks = mJsEvaluator.getResultCallbacks(); assertEquals(1, callbacks.size()); - assertEquals(callbackMock, callbacks.get(0)); + assertEquals(callbackMock, callbacks.entrySet().iterator().next().getValue()); } public void testEvaluate_shouldError() { @@ -142,16 +147,17 @@ public void testJsCallFinished_doesNotRunCallBackWhenIndexIsMinusOne() { mJsEvaluator.jsCallFinished("my result", -1); } - public void testJsCallFinished_runsCallback() { - final ArrayList callbacks = mJsEvaluator.getResultCallbacks(); + public void testJsCallFinished_runsCallbackAndRemove() { + final Map callbacks = mJsEvaluator.getResultCallbacks(); final JsCallbackMock callback = new JsCallbackMock(); - callbacks.add(callback); + callbacks.put(0, callback); final HandlerWrapperMock handlerWrapperMock = new HandlerWrapperMock(); mJsEvaluator.setHandler(handlerWrapperMock); mJsEvaluator.jsCallFinished("my result", 0); assertEquals("my result", callback.resultValue); + assertTrue(callbacks.isEmpty()); } public void testDestroy() { diff --git a/app/src/androidTest/java/com/evgenii/jsevaluatortests/mocks/RequestIdGeneratorMock.java b/app/src/androidTest/java/com/evgenii/jsevaluatortests/mocks/RequestIdGeneratorMock.java new file mode 100644 index 0000000..451e300 --- /dev/null +++ b/app/src/androidTest/java/com/evgenii/jsevaluatortests/mocks/RequestIdGeneratorMock.java @@ -0,0 +1,17 @@ +package com.evgenii.jsevaluatortests.mocks; + +import com.evgenii.jsevaluator.RequestIdGenerator; + +public class RequestIdGeneratorMock extends RequestIdGenerator { + + private int nextGenerated = 1; + + public void setNextGenerated(int nextGenerated) { + this.nextGenerated = nextGenerated; + } + + @Override + public int generate() { + return nextGenerated; + } +} diff --git a/jsevaluator/build/outputs/aar/jsevaluator-1.0.aar b/jsevaluator/build/outputs/aar/jsevaluator-1.0.aar index 7869bead1699320a139c8c943f92cef32f8ee2fb..a425bec6674f195b255c56f32ad3926dbebe452f 100644 GIT binary patch delta 9743 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 delta 8665 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 mResultCallbacks = new ArrayList(); + private final Map mResultCallbacks = new HashMap<>(); - private HandlerWrapperInterface mHandler; + private HandlerWrapperInterface mHandler = new HandlerWrapper(); + + private RequestIdGenerator requestIdGenerator = new RequestIdGenerator(); public JsEvaluator(Context context) { mContext = context; - mHandler = new HandlerWrapper(); } @Override @@ -72,15 +77,10 @@ public void evaluate(String jsCode) { @Override public void evaluate(String jsCode, JsCallback resultCallback) { - int callbackIndex = mResultCallbacks.size(); - if (resultCallback == null) { - callbackIndex = -1; - } - + int callbackIndex = requestIdGenerator.generate(); final String js = JsEvaluator.getJsForEval(jsCode, callbackIndex); - - if (resultCallback != null) { - mResultCallbacks.add(resultCallback); + if(resultCallback != null) { + mResultCallbacks.put(callbackIndex, resultCallback); } getWebViewWrapper().loadJavaScript(js); } @@ -97,7 +97,7 @@ public WebView getWebView() { return getWebViewWrapper().getWebView(); } - public ArrayList getResultCallbacks() { + public Map getResultCallbacks() { return mResultCallbacks; } @@ -110,10 +110,10 @@ public WebViewWrapperInterface getWebViewWrapper() { @Override public void jsCallFinished(final String value, Integer callIndex) { - if (callIndex == -1) + final JsCallback callback = mResultCallbacks.remove(callIndex); + if (callback == null) { return; - - final JsCallback callback = mResultCallbacks.get(callIndex); + } mHandler.post(new Runnable() { @Override @@ -127,13 +127,18 @@ public void run() { }); } - // Used in test only to replace mHandler with a mock + @VisibleForTesting public void setHandler(HandlerWrapperInterface handlerWrapperInterface) { mHandler = handlerWrapperInterface; } - // Used in test only to replace webViewWrapper with a mock + @VisibleForTesting public void setWebViewWrapper(WebViewWrapperInterface webViewWrapper) { mWebViewWrapper = webViewWrapper; } + + @VisibleForTesting + public void setRequestIdGenerator(RequestIdGenerator requestIdGenerator){ + this.requestIdGenerator = requestIdGenerator; + } } diff --git a/jsevaluator/src/main/java/com/evgenii/jsevaluator/RequestIdGenerator.java b/jsevaluator/src/main/java/com/evgenii/jsevaluator/RequestIdGenerator.java new file mode 100644 index 0000000..9691e61 --- /dev/null +++ b/jsevaluator/src/main/java/com/evgenii/jsevaluator/RequestIdGenerator.java @@ -0,0 +1,10 @@ +package com.evgenii.jsevaluator; + +import java.util.UUID; + +public class RequestIdGenerator { + + public int generate(){ + return UUID.randomUUID().hashCode(); + } +} From 070dcab8f8dab8f54fe0148437244fac90d3dc1c Mon Sep 17 00:00:00 2001 From: Krzysztof Osmulski Date: Mon, 4 Sep 2017 16:39:27 +0200 Subject: [PATCH 2/3] cleaned up gitignore for idea and iml --- .idea/.name | 1 - .idea/compiler.xml | 22 ---- .idea/copyright/profiles_settings.xml | 3 - .idea/encodings.xml | 6 - .idea/gradle.xml | 21 ---- .idea/misc.xml | 46 ------- .idea/modules.xml | 10 -- .idea/runConfigurations.xml | 12 -- ...ests_in__com_evgenii_jsevaluatortests_.xml | 46 ------- .idea/vcs.xml | 6 - JSEvaluator.iml | 19 --- app/app.iml | 119 ------------------ app/tests.iml | 94 -------------- jsevaluator/.gitignore | 2 +- jsevaluator/jsevaluator.iml | 113 ----------------- 15 files changed, 1 insertion(+), 519 deletions(-) delete mode 100644 .idea/.name delete mode 100644 .idea/compiler.xml delete mode 100644 .idea/copyright/profiles_settings.xml delete mode 100644 .idea/encodings.xml delete mode 100644 .idea/gradle.xml delete mode 100644 .idea/misc.xml delete mode 100644 .idea/modules.xml delete mode 100644 .idea/runConfigurations.xml delete mode 100644 .idea/runConfigurations/Tests_in__com_evgenii_jsevaluatortests_.xml delete mode 100644 .idea/vcs.xml delete mode 100644 JSEvaluator.iml delete mode 100644 app/app.iml delete mode 100644 app/tests.iml delete mode 100644 jsevaluator/jsevaluator.iml diff --git a/.idea/.name b/.idea/.name deleted file mode 100644 index 9fed947..0000000 --- a/.idea/.name +++ /dev/null @@ -1 +0,0 @@ -JSEvaluator \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml deleted file mode 100644 index 96cc43e..0000000 --- a/.idea/compiler.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/copyright/profiles_settings.xml b/.idea/copyright/profiles_settings.xml deleted file mode 100644 index e7bedf3..0000000 --- a/.idea/copyright/profiles_settings.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml deleted file mode 100644 index 97626ba..0000000 --- a/.idea/encodings.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml deleted file mode 100644 index 723e8fe..0000000 --- a/.idea/gradle.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index 5d19981..0000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index 1ec183b..0000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml deleted file mode 100644 index 7f68460..0000000 --- a/.idea/runConfigurations.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/runConfigurations/Tests_in__com_evgenii_jsevaluatortests_.xml b/.idea/runConfigurations/Tests_in__com_evgenii_jsevaluatortests_.xml deleted file mode 100644 index db924b0..0000000 --- a/.idea/runConfigurations/Tests_in__com_evgenii_jsevaluatortests_.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - - - \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 35eb1dd..0000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/JSEvaluator.iml b/JSEvaluator.iml deleted file mode 100644 index 78e6e4b..0000000 --- a/JSEvaluator.iml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/app.iml b/app/app.iml deleted file mode 100644 index c9358a9..0000000 --- a/app/app.iml +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/tests.iml b/app/tests.iml deleted file mode 100644 index 76a57fd..0000000 --- a/app/tests.iml +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/jsevaluator/.gitignore b/jsevaluator/.gitignore index 429dd5c..2fd54a4 100644 --- a/jsevaluator/.gitignore +++ b/jsevaluator/.gitignore @@ -5,4 +5,4 @@ build/* build/outputs/* !build/outputs/aar/ - +*.iml \ No newline at end of file diff --git a/jsevaluator/jsevaluator.iml b/jsevaluator/jsevaluator.iml deleted file mode 100644 index aa73822..0000000 --- a/jsevaluator/jsevaluator.iml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file From 4bbac7bffa134ea6af7b366da6473b9afe8de472 Mon Sep 17 00:00:00 2001 From: Krzysztof Osmulski Date: Wed, 6 Sep 2017 16:38:56 +0200 Subject: [PATCH 3/3] synchronized map to solve multithread possible issues --- .../src/main/java/com/evgenii/jsevaluator/JsEvaluator.java | 5 +++-- .../java/com/evgenii/jsevaluator/RequestIdGenerator.java | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/jsevaluator/src/main/java/com/evgenii/jsevaluator/JsEvaluator.java b/jsevaluator/src/main/java/com/evgenii/jsevaluator/JsEvaluator.java index 6227498..1b1526a 100644 --- a/jsevaluator/src/main/java/com/evgenii/jsevaluator/JsEvaluator.java +++ b/jsevaluator/src/main/java/com/evgenii/jsevaluator/JsEvaluator.java @@ -11,6 +11,7 @@ import com.evgenii.jsevaluator.interfaces.WebViewWrapperInterface; import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.UUID; @@ -54,7 +55,7 @@ public static String getJsForEval(String jsCode, int callbackIndex) { private final Context mContext; - private final Map mResultCallbacks = new HashMap<>(); + private final Map mResultCallbacks = Collections.synchronizedMap(new HashMap()); private HandlerWrapperInterface mHandler = new HandlerWrapper(); @@ -138,7 +139,7 @@ public void setWebViewWrapper(WebViewWrapperInterface webViewWrapper) { } @VisibleForTesting - public void setRequestIdGenerator(RequestIdGenerator requestIdGenerator){ + public void setRequestIdGenerator(RequestIdGenerator requestIdGenerator) { this.requestIdGenerator = requestIdGenerator; } } diff --git a/jsevaluator/src/main/java/com/evgenii/jsevaluator/RequestIdGenerator.java b/jsevaluator/src/main/java/com/evgenii/jsevaluator/RequestIdGenerator.java index 9691e61..6826b1f 100644 --- a/jsevaluator/src/main/java/com/evgenii/jsevaluator/RequestIdGenerator.java +++ b/jsevaluator/src/main/java/com/evgenii/jsevaluator/RequestIdGenerator.java @@ -4,7 +4,7 @@ public class RequestIdGenerator { - public int generate(){ + public int generate() { return UUID.randomUUID().hashCode(); } }