boolean (@Nullable String url, @Nullable String cookieName, @NotNull IntFunction<Boolean> checkFunction, @Nullable Integer maxTimeToWait) { int timeout = notNull(maxTimeToWait, DEFAULT_TIMEOUT_MS); myLock.lock(); try { Future<@NotNull Boolean> future = myExecutorService.submit(() -> { if (checkFunction.apply(timeout / 2)) { LOG.debug("No cookies to be deleted"); return true; } if (!myCefCookieManager.deleteCookies(url, cookieName)) { LOG.error("Posting task to delete cookies 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 deleting took more than " + timeout + " ms"); return false; } catch (InterruptedException e) { LOG.error("Cookie deleting is interrupted"); return false; } } catch (Exception e) { LOG.error(e); return false; } finally { myLock.unlock(); } }