boolean (@NotNull String url, @NotNull JBCefCookie jbCefCookie, @Nullable Integer maxTimeToWait) { if (!checkArgs(url, jbCefCookie)) return false; int timeout = notNull(maxTimeToWait, DEFAULT_TIMEOUT_MS); IntFunction<Boolean> checkFunction = (timeoutForCheck) -> getCookies(url, null, timeoutForCheck).contains(jbCefCookie); myLock.lock(); try { Future<@NotNull Boolean> future = myExecutorService.submit(() -> { if (checkFunction.apply(timeout / 2)) { LOG.debug("Cookie is already set"); return true; } if (!myCefCookieManager.setCookie(url, jbCefCookie.getCefCookie())) { LOG.error("Posting task to set cookie is failed"); return false; } while (myLock.isLocked()) { boolean result = checkFunction.apply(timeout / 2); if (result) return true; } return false; }); try { return future.get(timeout, TimeUnit.MILLISECONDS); } catch (TimeoutException e) { LOG.error("Cookie setting took more than " + timeout + " ms"); return false; } catch (InterruptedException e) { LOG.error("Cookie setting is interrupted"); return false; } } catch (Exception e) { LOG.error(e); return false; } finally { myLock.unlock(); } }