Skip to content
This repository was archived by the owner on Jul 22, 2024. It is now read-only.

Commit b41a82c

Browse files
bluemarvinkeianhzo
authored andcommitted
Drop m. prefix from URI when switching to desktop mode. Fixes #1473 (#1542)
1 parent 06bb0a8 commit b41a82c

3 files changed

Lines changed: 62 additions & 3 deletions

File tree

app/src/common/shared/org/mozilla/vrbrowser/browser/engine/SessionSettings.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,15 @@ class SessionSettings {
1212
private boolean isTrackingProtectionEnabled;
1313
private boolean isSuspendMediaWhenInactiveEnabled;
1414
private int userAgentMode;
15+
private int viewportMode;
1516
private boolean isServoEnabled;
1617

1718
private SessionSettings(@NotNull Builder builder) {
1819
this.isMultiprocessEnabled = builder.isMultiprocessEnabled;
1920
this.isTrackingProtectionEnabled = builder.isTrackingProtectionEnabled;
2021
this.isSuspendMediaWhenInactiveEnabled = builder.isSuspendMediaWhenInactiveEnabled;
2122
this.userAgentMode = builder.userAgentMode;
23+
this.viewportMode = builder.viewportMode;
2224
this.isServoEnabled = builder.isServoEnabled;
2325
}
2426

@@ -50,6 +52,10 @@ public void setUserAgentMode(int mode) {
5052
userAgentMode = mode;
5153
}
5254

55+
public int getViewportMode() { return viewportMode; }
56+
57+
public void setViewportMode(final int mode) { viewportMode = mode; }
58+
5359
public boolean isServoEnabled() {
5460
return isServoEnabled;
5561
}
@@ -64,6 +70,7 @@ public static class Builder {
6470
private boolean isTrackingProtectionEnabled;
6571
private boolean isSuspendMediaWhenInactiveEnabled;
6672
private int userAgentMode;
73+
private int viewportMode;
6774
private boolean isServoEnabled;
6875

6976
public Builder() {
@@ -89,6 +96,11 @@ public Builder withUserAgent(int userAgent){
8996
return this;
9097
}
9198

99+
public Builder withViewport(int viewport) {
100+
this.viewportMode = viewport;
101+
return this;
102+
}
103+
92104
public Builder withServo(boolean isServoEnabled){
93105
this.isServoEnabled= isServoEnabled;
94106
return this;
@@ -100,6 +112,7 @@ public Builder withDefaultSettings(Context context) {
100112
.withTrackingProteccion(SettingsStore.getInstance(context).isTrackingProtectionEnabled())
101113
.withSuspendMediaWhenInactive(true)
102114
.withUserAgent(GeckoSessionSettings.USER_AGENT_MODE_VR)
115+
.withViewport(GeckoSessionSettings.VIEWPORT_MODE_MOBILE)
103116
.withServo(false);
104117
}
105118

app/src/common/shared/org/mozilla/vrbrowser/browser/engine/SessionStack.java

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,10 @@
3636
import org.mozilla.vrbrowser.utils.InternalPages;
3737

3838
import java.util.ArrayList;
39+
import java.net.URI;
40+
import java.net.URISyntaxException;
41+
import java.util.ArrayDeque;
42+
import java.util.Deque;
3943
import java.util.HashMap;
4044
import java.util.LinkedHashMap;
4145
import java.util.LinkedList;
@@ -743,13 +747,55 @@ public int getUaMode() {
743747
return mCurrentSession.getSettings().getUserAgentMode();
744748
}
745749

750+
private static final String M_PREFIX = "m.";
751+
private static final String MOBILE_PREFIX = "mobile.";
752+
753+
private String checkForMobileSite(String aUri) {
754+
String result = null;
755+
URI uri;
756+
try {
757+
uri = new URI(aUri);
758+
} catch (URISyntaxException e) {
759+
Log.d(LOGTAG, "Error parsing URL: " + aUri + " " + e.getMessage());
760+
return null;
761+
}
762+
String authority = uri.getAuthority();
763+
if (authority == null) {
764+
return null;
765+
}
766+
authority = authority.toLowerCase();
767+
String foundPrefix = null;
768+
if (authority.startsWith(M_PREFIX)) {
769+
foundPrefix= M_PREFIX;
770+
} else if (authority.startsWith(MOBILE_PREFIX)) {
771+
foundPrefix = MOBILE_PREFIX;
772+
}
773+
if (foundPrefix != null) {
774+
try {
775+
uri = new URI(uri.getScheme(), authority.substring(foundPrefix.length()), uri.getPath(), uri.getQuery(), uri.getFragment());
776+
result = uri.toString();
777+
} catch (URISyntaxException e) {
778+
Log.d(LOGTAG, "Error dropping mobile prefix from: " + aUri + " " + e.getMessage());
779+
}
780+
}
781+
return result;
782+
}
783+
746784
public void setUaMode(int mode) {
747785
if (mCurrentSession != null) {
748786
SessionState state = mSessions.get(mCurrentSession.hashCode());
749787
if (state != null && state.mSettings.getUserAgentMode() != mode) {
750788
state.mSettings.setUserAgentMode(mode);
751789
mCurrentSession.getSettings().setUserAgentMode(mode);
752-
mCurrentSession.reload();
790+
String overrideUri = null;
791+
if (mode == GeckoSessionSettings.USER_AGENT_MODE_DESKTOP) {
792+
state.mSettings.setViewportMode(GeckoSessionSettings.VIEWPORT_MODE_DESKTOP);
793+
overrideUri = checkForMobileSite(state.mUri);
794+
} else {
795+
state.mSettings.setViewportMode(GeckoSessionSettings.VIEWPORT_MODE_MOBILE);
796+
}
797+
mCurrentSession.getSettings().setViewportMode(state.mSettings.getViewportMode());
798+
mCurrentSession.loadUri(overrideUri != null ? overrideUri : state.mUri, GeckoSession.LOAD_FLAGS_BYPASS_CACHE | GeckoSession.LOAD_FLAGS_REPLACE_HISTORY);
753799
}
754800
}
755801
}

app/src/main/cpp/WidgetPlacement.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ WidgetPlacement::FromJava(JNIEnv* aEnv, jobject& aObject) {
1717

1818
jclass clazz = aEnv->GetObjectClass(aObject);
1919

20-
std::shared_ptr<WidgetPlacement> result(new WidgetPlacement());;
20+
std::shared_ptr<WidgetPlacement> result(new WidgetPlacement());
2121

2222
#define GET_INT_FIELD(name) { \
2323
jfieldID f = aEnv->GetFieldID(clazz, #name, "I"); \
@@ -77,4 +77,4 @@ WidgetPlacement::GetTextureHeight() const {
7777
return (int32_t)ceilf(height * density * textureScale);
7878
}
7979

80-
}
80+
}

0 commit comments

Comments
 (0)