From 389dbe694501e68932f0e33bc2dab3717fe6b18c Mon Sep 17 00:00:00 2001 From: Manuel Martin Date: Fri, 5 Oct 2018 19:18:19 +0200 Subject: [PATCH] wip --- .../org/mozilla/vrbrowser/SessionStore.java | 39 ++++++++++++++++--- .../vrbrowser/ui/NavigationBarWidget.java | 16 ++++++-- .../ui/prompts/ChoicePromptWidget.java | 3 +- .../mozilla/vrbrowser/utils/ValueHolder.java | 19 +++++++++ 4 files changed, 67 insertions(+), 10 deletions(-) create mode 100644 app/src/common/shared/org/mozilla/vrbrowser/utils/ValueHolder.java diff --git a/app/src/common/shared/org/mozilla/vrbrowser/SessionStore.java b/app/src/common/shared/org/mozilla/vrbrowser/SessionStore.java index 3ff303efdc..8a96d11ded 100644 --- a/app/src/common/shared/org/mozilla/vrbrowser/SessionStore.java +++ b/app/src/common/shared/org/mozilla/vrbrowser/SessionStore.java @@ -14,16 +14,30 @@ import android.view.inputmethod.CursorAnchorInfo; import android.view.inputmethod.ExtractedText; import android.view.inputmethod.ExtractedTextRequest; + import org.mozilla.gecko.GeckoAppShell; import org.mozilla.gecko.GeckoProfile; -import org.mozilla.geckoview.*; +import org.mozilla.geckoview.GeckoResult; +import org.mozilla.geckoview.GeckoRuntime; +import org.mozilla.geckoview.GeckoRuntimeSettings; +import org.mozilla.geckoview.GeckoSession; +import org.mozilla.geckoview.GeckoSessionSettings; import org.mozilla.vrbrowser.telemetry.TelemetryWrapper; +import org.mozilla.vrbrowser.utils.ValueHolder; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; -import java.util.*; +import java.util.ArrayDeque; +import java.util.ArrayList; +import java.util.Deque; +import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; public class SessionStore implements GeckoSession.NavigationDelegate, GeckoSession.ProgressDelegate, GeckoSession.ContentDelegate, GeckoSession.TextInputDelegate, GeckoSession.TrackingProtectionDelegate, @@ -787,18 +801,31 @@ public GeckoResult onLoadRequest(@NonNull GeckoSession aSession, @NonNull String aUri, @TargetWindow int target, @LoadRequestFlags int flags) { - GeckoResult result = new GeckoResult<>(); + final GeckoResult result = new GeckoResult<>(); if (aUri.equalsIgnoreCase(PRIVATE_BROWSING_URI)) { switchPrivateMode(); result.complete(true); } else { + final ValueHolder count = new ValueHolder(new Integer(0)); + final ValueHolder listenersResult = new ValueHolder(new Boolean(false)); for (GeckoSession.NavigationDelegate listener: mNavigationListeners) { - listener.onLoadRequest(aSession, aUri, target, flags); + GeckoResult listenerResult = listener.onLoadRequest(aSession, aUri, target, flags); + listenerResult.then(new GeckoResult.OnValueListener() { + @Nullable + @Override + public GeckoResult onValue(@Nullable Boolean value) { + listenersResult.setValue(listenersResult.getValue().booleanValue() | value); + if (count.getValue() == mNavigationListeners.size() - 1) { + result.complete(listenersResult.getValue()); + } + count.setValue(count.getValue().intValue() + 1); + + return null; + } + }); } - - result.complete(false); } return result; diff --git a/app/src/common/shared/org/mozilla/vrbrowser/ui/NavigationBarWidget.java b/app/src/common/shared/org/mozilla/vrbrowser/ui/NavigationBarWidget.java index 6c4b95fb87..e1f8494837 100644 --- a/app/src/common/shared/org/mozilla/vrbrowser/ui/NavigationBarWidget.java +++ b/app/src/common/shared/org/mozilla/vrbrowser/ui/NavigationBarWidget.java @@ -401,6 +401,7 @@ public GeckoResult onLoadRequest(GeckoSession aSession, final String aU mURLBar.setURL(aUri); } + final GeckoResult result = new GeckoResult<>(); if (aUri != null) { Uri uri = Uri.parse(aUri); if (uri.getScheme().equals("file")) { @@ -411,19 +412,28 @@ public GeckoResult onLoadRequest(GeckoSession aSession, final String aU new GeckoSession.PermissionDelegate.Callback() { @Override public void grant() { - SessionStore.get().reload(); + result.complete(false); } @Override public void reject() { - // Do nothing, let the default error page load + result.complete(false); } }); + + } else { + result.complete(false); } + + } else { + result.complete(false); } + + } else { + result.complete(false); } - return GeckoResult.fromValue(true); + return result; } // Progress Listener diff --git a/app/src/common/shared/org/mozilla/vrbrowser/ui/prompts/ChoicePromptWidget.java b/app/src/common/shared/org/mozilla/vrbrowser/ui/prompts/ChoicePromptWidget.java index 2f5cc90647..0248283d6e 100644 --- a/app/src/common/shared/org/mozilla/vrbrowser/ui/prompts/ChoicePromptWidget.java +++ b/app/src/common/shared/org/mozilla/vrbrowser/ui/prompts/ChoicePromptWidget.java @@ -419,7 +419,8 @@ public GeckoResult onLoadRequest(@NonNull GeckoSession session, @NonNul if (mPromptDelegate != null) { mPromptDelegate.onDismissed(getDefaultChoices(mListItems)); } - return null; + + return GeckoResult.fromValue(false); } @Nullable diff --git a/app/src/common/shared/org/mozilla/vrbrowser/utils/ValueHolder.java b/app/src/common/shared/org/mozilla/vrbrowser/utils/ValueHolder.java new file mode 100644 index 0000000000..2c12f7af2a --- /dev/null +++ b/app/src/common/shared/org/mozilla/vrbrowser/utils/ValueHolder.java @@ -0,0 +1,19 @@ +package org.mozilla.vrbrowser.utils; + +public class ValueHolder { + + private T value; + + public ValueHolder(T aValue) { + value = aValue; + } + + public T getValue() { + return value; + } + + public void setValue(Object newValue) { + value = (T) newValue; + } + +}